Hibernate / JPA和PostgreSQL - 主键?

时间:2010-05-12 23:02:36

标签: hibernate jpa postgresql primary-key

我正在尝试使用Hibernate / JPA实现一些基本实体。最初代码部署在MySQL上并且工作正常。现在,我将它移植到使用PostgreSQL。在MySQL中,我的实体类使用以下语法将其主键定义为自动递增的long值:

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;

但是,当我尝试一次插入大量记录时,我发现PostgreSQL出现错误。为了在PostgreSQL中获得与MySQL相同的自动递增行为,我需要注释我的主键是什么?感谢您提供的任何帮助!

2 个答案:

答案 0 :(得分:18)

GenerationType.IDENTITY

答案 1 :(得分:10)

我已经解决了这个问题。以前 - 在我的MySQL实现中 - 我使用了一个带有以下签名的抽象基类:

@MappedSuperclass
public abstract class AbstractDomainEntity implements Serializable {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id = null;

        ...
}

...然后我在剩下的每个实体中扩展了它。我已经将此属性推送到实体本身,并将@GenerationType配置为SEQUENCE。例如:

public class UserProfileBean extends AbstractIdentifiedDomainEntitiy {

    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "profile_seq")
    @SequenceGenerator(name = "profile_seq", sequenceName = "profile_seq")
    private Long id = null;

        ...
}

通过这样做,在Hibernate / JPA和PostgreSQL中生成并使用了正确的序列。之前,即使我将GenerationType声明为Sequence,也没有创建。感谢您对此事的所有帮助和建议!