【发布时间】:2014-12-24 07:35:53
【问题描述】:
我正在使用 arquillian 运行容器内测试。我通过在部署中添加import.sql 来预填充数据库。在测试期间,我想创建更多实体。
不幸的是,这失败了PersistenceException:
javax.persistence.PersistenceException: org.hibernate.exception.ConstraintViolationException:唯一索引或 主键违规:“PRIMARY_KEY_BE ON PUBLIC.KVS_MIPO_DOWNLOAD(ID)"
如果我不预先填充数据库,或者不保留新实体,一切都会顺利进行。
id是唯一唯一的字段,所以我强烈怀疑它一定是使用序列的id生成。
@Entity
@Table(name = "KVS_MIPO_DOWNLOAD")
@Inheritance(strategy = InheritanceType.JOINED)
@DiscriminatorColumn(name = "type", discriminatorType = DiscriminatorType.STRING)
public abstract class DownloadResource implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
protected Integer id;
该实体是另一个具体实体的超类,不添加任何唯一属性。
可以做些什么来适应这两种可能性 - 手动插入和使用生成的 id?
谢谢
我在 JBoss 7.1.1 中通过 Hibernate 4.0.1 使用 JPA 2。数据库是 Sybase ASE 15。
编辑:到目前为止我发现的一种解决方法是将手动添加的实体的 ID 设置得足够高以避免冲突。但这对于生产来说还不够好——太多的员工对数据库有写访问权,并且可能会想手动添加东西。我希望应用程序足够健壮,不会在这种情况下死亡和爆炸。
【问题讨论】:
标签: hibernate jpa jpa-2.0 jboss-arquillian