没有主键的表的JPA实体

时间:2010-07-05 11:30:33

标签: java jpa

我有一个没有主键的MySQL表,我必须将它映射到JPA实体。我无法以任何方式修改表格。

因为实体必须有主键,所以我必须指定一个。如果我确定我在实体中使用的字段(或字段,我应该选择使用复合主键)在表中始终是唯一的(而不是null),那么表格不能没有在CREATE TABLE中指定的主键导致任何问题吗?

2 个答案:

答案 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是否为主键

无关紧要