我有一个没有主键的MySQL表,我必须将它映射到JPA实体。我无法以任何方式修改表格。
因为实体必须有主键,所以我必须指定一个。如果我确定我在实体中使用的字段(或字段,我应该选择使用复合主键)在表中始终是唯一的(而不是null),那么表格不能没有在CREATE TABLE中指定的主键导致任何问题吗?
答案 0 :(得分:8)
这是对的。 JPA无法知道它作为PK使用的列是否实际上是数据库中的真实PK。如果这些列在实践中是PK,那么它应该没问题。
如果伪PK列未正确编入索引,您可能会遇到一些性能问题,但JPA会在假设它运行良好的情况下对PK执行查询。
答案 1 :(得分:2)
JPA本身不会分析您的数据库。只是不要使用使用主键的常用方法(find / merge / ...)而是使用命名查询,例如使用jpql update语法。
@Entity
@Table(name = "login")
@NamedQueries({
@NamedQuery(name = "Login.updateLastOnline",
query = "UPDATE Login l SET l.lastOnline = :newDate WHERE l.loginId = :loginId")
})
public class Login implements Serializable
{
loginId是否为主键
无关紧要