1

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

@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),在什么情况下会更新记录?
case #1: - id 等于 DB_ID,code 不等于 LOGIN
case #2: - id 不等于 DB_ID,code 等于 LOGIN
case #3: - idequals DB_ID 和 code 等于 LOGIN
或任何其他条件?

4

2 回答 2

5

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

于 2012-05-07T08:37:03.060 回答
-1

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

于 2012-05-07T08:32:44.950 回答