我正在尝试使用Hibernate/JPA实现一些基本的实体。最初,代码部署在MySQL上,运行良好。现在,我将它移植到使用PostgreSQL。在MySQL中,我的实体类使用以下语法将其主键定义为自动递增的长值:
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;但是,我发现在尝试一次插入大量记录时,使用PostgreSQL会出现错误。我需要用什么来注释我的主键,才能在PostgreSQL中获得与MySQL相同的自动递增行为?感谢您能提供的任何帮助!
发布于 2010-05-15 00:37:39
我已经解决了这个问题。以前--在我的MySQL实现中--我使用了一个具有以下签名的抽象基类:
@MappedSuperclass
public abstract class AbstractDomainEntity implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id = null;
...
}...and,然后我在我剩下的每个实体中扩展了它。此后,我将此属性下推到实体本身中,并将@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,也没有创建任何序列。感谢你在这件事上的所有帮助和建议!
发布于 2010-05-14 16:31:39
GenerationType.IDENTITY
https://stackoverflow.com/questions/2823396
复制相似问题