JPA アノテーションを使用して結合テーブルを作成するにはどうすればよいでしょうか? 質問する

JPA アノテーションを使用して結合テーブルを作成するにはどうすればよいでしょうか? 質問する

アノテーションを使用してデータベースに結合テーブルを作成する必要があるのでJPA、結果は次のようになります。

ここに画像の説明を入力してください

これまでのところ、2 つのエンティティを実装しました。

@Entity
@Table(name="USERS", schema="ADMIN")
public class User implements Serializable {

    private static final long serialVersionUID = -1244856316278032177L;
    @Id 
    @Column(nullable = false)
    private String userid;  
    
    @Column(nullable = false)
    private String password;

    public String getUserid() {
        return userid;
    }

    public void setUserid(String userid) {
        this.userid = userid;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }
    
}

@Entity
@Table(name="GROUPS", schema="ADMIN")
public class Group implements Serializable {

    private static final long serialVersionUID = -7274308564659753174L;
    @Id
    @Column(nullable = false)
    private String groupid;
    
    public String getGroupid() {
        return groupid;
    }
    public void setGroupid(String groupid) {
        this.groupid = groupid;
    }
}

という別のエンティティを作成する必要がありますUSER_GROUPか、それともいくつかの注釈を追加するだけで、エンティティ (ORM) からテーブルの作成を実行したときに結合テーブルが自動的に作成されるようにできますか?

画像と同じ結果を得るには、エンティティに注釈をどのように付ければよいでしょうか?

ベストアンサー1

User_Group エンティティは、オブジェクト指向のものではなく、基礎となるデータベース表現であるため、絶対に作成しないでください。

次のように定義することで結合テーブルを実現できます。

@Entity
@Table(name="USERS", schema="ADMIN")
public class User implements Serializable {
//...

@ManyToOne
@JoinTable(name="USER_GROUP")
Group group;

@Entity
@Table(name="GROUPS", schema="ADMIN")
public class Group implements Serializable {
//...

@OneToMany(mappedBy="group")
Set<User> users;

編集:列の名前を明示的に設定したい場合は、以下に示すように @JoinColumn 要素を使用できます。

@ManyToOne
@JoinTable(name="USER_GROUP",
    joinColumns = @JoinColumn(name = "userid", 
                              referencedColumnName = "userid"), 
    inverseJoinColumns = @JoinColumn(name = "groupid", 
                              referencedColumnName = "groupid"))
Group group;

おすすめ記事