In JPA's CollectionTable example
@Entity
public class Person {
@Id protected long id;
@ElementCollection
@Column(name="name")
protected Set<String> nickNames = new HashSet();
}
它创建具有以下值的连接表Person_nickNames
:
很难编辑/删除值。我们不能使用phpmyadmin等工具来单击行和编辑值,因为没有主键。
JPA可以在join表中生成代理主键吗?
环境:采用Hibernate 4.3实现的JPA 2
发布于 2016-01-08 11:45:50
Hi Smallufo
在@Id
之后写入@GeneratedValue(strategy = GenerationType.AUTO)
这将生成一个代理主键。
发布于 2016-01-08 12:39:42
我认为这应该是可能的。在PERSON_NICKNAMES表中添加了一个ID列作为IDENTITY,使用下面的Person映射类,我可以在Person_nicknames表中生成惟一的ID。
@Entity
@Table(name="Person")
public class Person {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private int id;
private String name;
@ElementCollection
@CollectionTable(name="Person_Nicknames", joinColumns=@JoinColumn(name="person_id"))
@Column(name="name")
private Set<String> nickNames;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Set<String> getNickNames() {
return nickNames;
}
public void setNickNames(Set<String> nickNames) {
this.nickNames = nickNames;
}
}
当我保存人员和昵称记录时,我在person_nicknames表中看到以下内容。
> ij> select * from Person_nicknames;
ID |PERSON_ID |NAME
1 |6 |nName0
2 |6 |nName1
3 |7 |nName0
4 |7 |nName1
https://stackoverflow.com/questions/34669087
复制相似问题