我们假设我已经定义了以下实体:
@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
或任何其他条件?
答案 0 :(得分:5)
任何具有复合 id(多个Id字段)的类都必须定义自己的IdClass(您尚未完成)。然后将IdClass的一个实例传递给EM.find。这很容易在JPA规范中找到
答案 1 :(得分:-1)
对于问题1,您应该只传递长ID,因为它是您的表的主键,您需要根据它找到。