アノテーションを使用してデータベースに結合テーブルを作成する必要があるので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;