【发布时间】:2016-07-12 10:28:58
【问题描述】:
我的 java 应用程序出现以下异常。
org.springframework.transaction.TransactionSystemException: Could not commit JPA transaction; nested exception is javax.persistence.RollbackException: Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.6.0.v20150309-bf26070): org.eclipse.persistence.exceptions.DatabaseException
内部异常:java.sql.SQLIntegrityConstraintViolationException:ORA-00001:违反了唯一约束 (USER1.ID_TYPE_TENANT_UNIQUE)。
我有一个在两个表之间建立了多对多关联的数据模型。两者之间有一个 JoinTable,我的实体是这样设置的。
public class MyEntity {
@Id
@SequenceGenerator( name = "MyEntitySeq", sequenceName = "SQ_ENTITY", allocationSize = 1, initialValue = 1 )
@GeneratedValue(strategy = GenerationType.IDENTITY, generator = "MyEntitySeq")
@Column(name = "ID")
private Integer id;
@ManyToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY)
@JoinTable(name = "MY_JOINED_TABLE",
joinColumns = {
@JoinColumn(name = "e_id", referencedColumnName = "ID")},
inverseJoinColumns = {
@JoinColumn(name = "inverse_id", referencedColumnName = "ID")})
private Set<Attributes> attributes;
}
我对实体表中的其他 3 个字段有唯一约束,对属性表的名称、值有唯一约束。当我尝试持久化具有一组属性的实体时,repository.save() 方法因以下原因而失败: 1.属性表中可能已经存在一个属性,由于唯一性约束而无法插入(这是我想要的。但我仍然想创建这些属性与实体的关联) 2. 实体可能已经存在,但违反了唯一性约束。 (我仍想插入尚未在数据库中的属性,并创建与该实体的关联到属性)。
如果这些实体/属性不在数据库中,它可以正常工作并且弹簧插入到所有 3 个表中,包括连接和所有内容。
如果我对没有关联的表执行 repository.save(),即使我对同一个主键执行 save(),save() 也会更新这些表。
为什么它在我的多线程中不起作用?
【问题讨论】:
-
您好,我想知道您是否能够解决您的问题?我可能有一个相关的问题。
标签: sql oracle many-to-many spring-data-jpa jointable