首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >是否让ElementCollection Set<String>生成代理主键?

是否让ElementCollection Set<String>生成代理主键?
EN

Stack Overflow用户
提问于 2016-01-08 11:37:01
回答 2查看 687关注 0票数 0

In JPA's CollectionTable example

代码语言:javascript
运行
复制
@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

EN

回答 2

Stack Overflow用户

发布于 2016-01-08 11:45:50

Hi Smallufo

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

这将生成一个代理主键。

票数 0
EN

Stack Overflow用户

发布于 2016-01-08 12:39:42

我认为这应该是可能的。在PERSON_NICKNAMES表中添加了一个ID列作为IDENTITY,使用下面的Person映射类,我可以在Person_nicknames表中生成惟一的ID。

代码语言:javascript
运行
复制
@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表中看到以下内容。

代码语言:javascript
运行
复制
> ij> select * from Person_nicknames; 
ID         |PERSON_ID  |NAME
1          |6          |nName0
2          |6          |nName1
3          |7          |nName0
4          |7          |nName1
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34669087

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档