2016-09-09 3 views
0

私は(JPAで)休止状態で多対多の関連付けをしようとしていますが、アソシエーションテーブル(FilmとActor間)は作成されません。Hibernate JPA ManyToManyアソシエーションで作成された結合テーブルがありません。

マイアクタクラス:

@Entity 
public class Actor { 

    private Long id; 
    private String firstname; 
    private String lastname; 
    private int age; 

    public Actor(){}; 

    public Actor(String firstname, String lastname){ 
     this.firstname=firstname; 
     this.lastname=lastname; 
    } 

    @ManyToMany 
    @JoinTable(name="actor_films", [email protected](name="actor_id"), [email protected](name="film_id")) 
    private Set<Film> films=new HashSet<Film>(); 

    @Id 
    @GeneratedValue 
    public Long getId() { 
     return id; 
    } 

    public void setId(Long id) { 
     this.id = id; 
    } 

    public String getFirstname() { 
     return firstname; 
    } 

    public void setFirstname(String firstname) { 
     this.firstname = firstname; 
    } 

    public String getLastname() { 
     return lastname; 
    } 

    public void setLastname(String lastname) { 
     this.lastname = lastname; 
    } 

    public int getAge() { 
     return age; 
    } 

    public void setAge(int age) { 
     this.age = age; 
    } 

    public void addFilm(Film film){ 
     this.films.add(film); 
    } 

} 

私の映画クラス:すべてのテーブルは私のHSQLデータベース内に作成され

// begin transaction 
Film film=new Film("DBZ"); 
Actor actor=new Actor("Bob","A"); 
em.persist(actor); 
em.persist(film); 
film.addActor(actor); 
// do commit 

:私の主な方法で

@Entity 
public class Film { 

    private Long id; 
    private String title; 
    @ManyToMany(mappedBy = "films") 
    @JoinTable(name="actor_films", [email protected](name="film_id"), [email protected](name="actor_id")) 
    private Set<Actor> actors=new HashSet<Actor>(); 


    public Film(){}; 
    public Film(String title){ 
     this.title=title; 
    }; 


    @Id 
    @GeneratedValue 
    public Long getId() { 
     return id; 
    } 

    public void setId(Long id) { 
     this.id = id; 
    } 

    public String getTitle() { 
     return title; 
    } 

    public void setTitle(String title) { 
     this.title = title; 
    } 


    public void addActor(Actor actor){ 
     this.actors.add(actor); 
    } 



} 

は、私はのような何かをします関連テーブルを除きます。だから誰でも私を助けることができます。

答えて

1

あなたがフィールドを混合して、マッピング・アノテーションのために使用することをアクセサているリバース。あなたはそれをすることはできません。いずれのクラスでも、マッピングアノテーションはゲッターのすべてまたはフィールドのすべてでなければなりません。それらを混ぜようとすると、ゲッターとフィールドのいくつかを混ぜようとすると、Hibernateはゲッターやフィールドを選び、他のものを無視します(指定しないとHibernateがどのように選択するかわかりません)。

各クラスの@Idアノテーションはゲッター上にあり、それによってHibernateはゲッターベースアノテーションを使用します。 @Id@GeneratedValueアノテーションを各クラスのidフィールドに移動するか、アクター/フィルム関係のゲッター(およびセッター)を定義し、@ManyToMany@JoinTable注釈を新しいゲッターに移動します。

フィールドのアノテーションを使用すると、Hibernateはgetters/setterをバイパスし、エンティティの内部フィールドに直接アクセスします。 getter上でそれらと一緒に、Hibernateはあなたのゲッターとセッターに電話します。

0

ヘルプ参加テーブルに関する詳細情報を提供することにより、少し休止状態にしてください。
あなたの映画エンティティで

@ManyToMany(mappedBy = "films") 
@JoinTable(name="actor_films", [email protected](name="film_id"), [email protected](name="actor_id")) 

あなたの俳優のエンティティで同じことをしますが、joinColumnsとinverseJoinColumns

https://docs.jboss.org/hibernate/orm/5.0/manual/en-US/html/ch07.html#collections-bidirectional

+0

あなたの答えをありがとう、私はあなたの解決策を試みますが、変更はありません。関連テーブルはまだ作成されていません。 –

関連する問題