具有两个ID的实体

时间:2012-05-07 08:11:15

标签: java hibernate jpa

我们假设我已经定义了以下实体:

@Entity   
class User{  

   @Id
   @GeneratedValue
   @Column(name = "DB_ID")
   private long id;

   @Id
   @Column(name = "LOGIN", unique = true)
   private String code;  

//setters, getters  
}  

问题#1。
当我使用方法.find(User.class, someId)时,我必须设置什么ID?我应该用吗? 长字段ID或字符串字段代码?或者我可以同时使用长字段ID和字符串字段代码吗?

问题#2。
如果我想使用方法.merge(user),在哪种情况下记录会更新?
情况#1: - id等于DB_ID,代码不等于LOGIN
情况#2: - id不等于DB_ID,代码等于LOGIN
情况#3: - idequals DB_ID和代码等于LOGIN
或任何其他条件?

2 个答案:

答案 0 :(得分:5)

任何具有复合 id(多个Id字段)的类都必须定义自己的IdClass(您尚未完成)。然后将IdClass的一个实例传递给EM.find。这很容易在JPA规范中找到

答案 1 :(得分:-1)

对于问题1,您应该只传递长ID,因为它是您的表的主键,您需要根据它找到。