【问题标题】:Spring data jpa repository save() not working for ManyToManySpring数据jpa存储库save()不适用于ManyToMany
【发布时间】: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


【解决方案1】:

试试这个(对不起我的英语,我在 Spring MVC 和 Hibernate 中是新手),我有类似的问题,这点很重要:

  1. 您需要获取要关联到第一个实体的元素第三个实体到同一事务中。
  2. 确保在您的 persistence-context-xml 中有

【讨论】:

    猜你喜欢
    • 2018-08-27
    • 2015-12-11
    • 2017-11-13
    • 2015-03-28
    • 2020-10-31
    • 2017-05-26
    • 2019-08-08
    • 2021-06-12
    • 2019-12-22
    相关资源
    最近更新 更多