Make ElementCollection Set <string>生成代理主键?

时间:2016-01-08 03:37:01

标签: java hibernate jpa primary-key

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

enter image description here

编辑/删除值很难。我们不能使用像phpmyadmin这样的工具来点击行并编辑值,因为没有PK。

JPA是否可以在连接表中生成代理主键?

环境:带有Hibernate 4.3实现的JPA 2

2 个答案:

答案 0 :(得分:0)

您好Smallufo

qplot(car.names[1:3],mtcars$wt[1:3],geom="bar",stat="identity") + geom_text(aes(y=mtcars$wt[1:3]),label=paste(mtcars$wt[1:3]),size=10,hjust=0.54,vjust=1.5,color="white") + science_theme + scale_y_discrete(expand=c(-0.5,0))

之后写下 @GeneratedValue(strategy = GenerationType.AUTO)

这将成为代理主键。

答案 1 :(得分:0)

我认为这应该是可能的。在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