sfr*_*frj 29 java database orm jpa java-ee
我需要使用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;
}
}
Run Code Online (Sandbox Code Playgroud)
@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;
}
}
Run Code Online (Sandbox Code Playgroud)
我应该创建另一个被调用的实体,USER_GROUP 或者我可以添加一些注释,因此当我从实体(ORM)运行创建表时,将自动创建连接表吗?
我应该如何注释我的实体以实现与图像中相同的效果?
Pio*_*cki 39
你绝对不应该创建User_Group实体,因为它更像是基础数据库表示而不是面向对象的实体.
您可以通过定义以下内容来实现连接表:
@Entity
@Table(name="USERS", schema="ADMIN")
public class User implements Serializable {
//...
@ManyToOne
@JoinTable(name="USER_GROUP")
Group group;
Run Code Online (Sandbox Code Playgroud)
@Entity
@Table(name="GROUPS", schema="ADMIN")
public class Group implements Serializable {
//...
@OneToMany(mappedBy="group")
Set<User> users;
Run Code Online (Sandbox Code Playgroud)
编辑:如果要显式设置列的名称,可以使用@JoinColumn元素,如下所示:
@ManyToOne
@JoinTable(name="USER_GROUP",
joinColumns = @JoinColumn(name = "userid",
referencedColumnName = "userid"),
inverseJoinColumns = @JoinColumn(name = "groupid",
referencedColumnName = "groupid"))
Group group;
Run Code Online (Sandbox Code Playgroud)
我会这样实现它:
@Entity
@Table(name="GROUPS", schema="ADMIN")
public class Group implements Serializable {
@OneToMany
@JoinTable(name = "USER_GROUP",
joinColumns = @JoinColumn(name = "groupid"),
inverseJoinColumns = @JoinColumn(name = "userid"))
private List<User> users;
}
Run Code Online (Sandbox Code Playgroud)
@PedroKowalski建议的解决方案也应该有效,但是您必须在用户实体中保留对Group实体的引用,这并不总是可行的.
要在图表中使用相同的注释,您可以在User班级中执行此操作:
@ManyToMany(fetch = FetchType.LAZY)
@JoinTable(name = "USER_GROUP",
joinColumns = { @JoinColumn(name = "userid") },
inverseJoinColumns = { @JoinColumn(name = "groupid") })
private List<Group> grups;
Run Code Online (Sandbox Code Playgroud)
在你的小组课堂上
@ManyToMany(fetch = FetchType.LAZY)
@JoinTable(name = "USER_GROUP",
joinColumns = { @JoinColumn(name = "groupid") },
inverseJoinColumns = { @JoinColumn(name = "userid") })
private List<User> users;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
80545 次 |
| 最近记录: |