我正在使用 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 设置得足够高以避免冲突。但这对于生产来说还不够好——太多的员工对数据库有写访问权,并且可能会想手动添加东西。我希望应用程序足够健壮,不会在这种情况下死亡和爆炸。