- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个 Challenge
类,它与 User
类具有多对一的关系。它是单向的,所以看起来像这样:
@Entity
@Table(name = "UserTable")
public class User {
@Id
private String userId;
}
@Entity
@Table(name = "ChallengeTable")
public class Challenge {
@Id
private String challengeId;
@ManyToOne(fetch = FetchType.EAGER, cascade = {CascadeType.MERGE, CascadeType.PERSIST, CascadeType.REFRESH})
@JoinColumn(name = "userId")
private User user;
}
我正在使用 Spring Data JPA
,当我在 Challenge
中使用 CRUDRepository
中的 save
方法时code> 对象,我希望它保留附加用户(如果该用户尚不存在),并将该用户合并到旧用户(如果已经存在)。
我在 UserRepository
中使用 findOne(String id)
方法来获取使用 userId
的用户,这就是用户我正在设置挑战
。
如果用户尚不存在,它可以很好地级联,但是当我尝试使用预先存在的用户保存它时,我得到了异常:
javax.persistence.EntityExistsException: a different object with the same identifier value was already associated with the session: [com.mywebsite.model.User#zk9moo78sx685g6o9yphegdx6lpoll9x]
我不确定我在这里做错了什么。将 CascadeType
更改为 ALL
不会改变任何内容。尝试完全删除 CascadeType 并首先手动保存用户也不起作用。这给了我错误:
org.hibernate.TransientPropertyValueException: object references an unsaved transient instance - save the transient instance before flushing: com.mywebsite.model.Challenge.user -> com.mywebsite.model.User
这似乎是在事务退出时发生的(因为我的服务层类用 @Transactional
注释)。
如果我取出 @Transactional
注释并手动保留用户,则似乎一切正常。 (不过,我仍然希望在服务级别上进行级联保存和事务。)
取出@Transactional
并尝试使用级联保存失败,并出现SQLIntegrityConstraintViolationException
异常,因为User
似乎成为一个独立的实体它尝试重新保留它,但该主键已经存在,因此失败。
任何人都可以帮助我了解这里发生的情况,并帮助我在 Spring Data JPA
中使用事务进行级联保存吗?
最佳答案
我尝试使用 Hibernate 特定的级联选项,以及我能想到的所有其他选项,但我无法让级联保存像 Hibernate CascadeType.SAVE_UPDATE
那样工作。我相信这是 JPA 与 Spring Data 的硬限制。
相反,我在服务和接口(interface)存储库之间添加了一个层。它保存了依赖实体(用户),然后保存了挑战。
关于java - Spring Data JPA 使用级联保存导致 EntityExistsException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16326916/
我有两个实体:Question 和 FavoritesCounter。首次将问题添加到 Collection 夹时,应创建 FavoritesCounter。 考虑一个用例,当两个用户试图同时将问题添
我目前正在研究 Java EE 7,并试图弄清楚何时会抛出 EntityExistsException。我目前有一个非常简单的具有基本属性的 Message 类。据我了解,当数据库中已经存在具有相同主
我有一个新的(即尚未出现在数据库中)JPA 实体,它使用以下代码保存到数据库中: public abstract class Dao { @PersistenceContext(name = "
我正在使用 JPA,我想在有人试图修改现有实体时抛出异常。我可以抛出 javax.persistence.EntityExistsException 还是应该考虑创建自己的异常类型?什么是最佳实践?
在 J2SE 应用程序中使用 JPA (OpenJPA) 我正在尝试使用条目列表的内容更新表:添加新条目或将现有条目替换为列表中的条目(如果存在)。 1) 这样做的最佳方法是什么? 为此,我想在同一个
我正在 Oracle DB 中插入一些记录。为了独特性,我使用 SequenceGenerator。下面是代码: public class XxspPoInLineLocqty implements
我对 Hibernate EntityManager 有疑问。 这是我的 DAO 函数: public Boolean create(T element) { System.out.print
我有一个 Challenge 类,它与 User 类具有多对一的关系。它是单向的,所以看起来像这样: @Entity @Table(name = "UserTable") public class U
我是 JPA 新手,正在进行一些实验,希望找出实体生命周期模型。我预计下面的代码会抛出 EntityExistsException。但是,它并没有抛出预期的异常,而是只是在数据库表中使用新的主键(加一
我有一个 JTA 事务,它管理 2 个数据库 A 和 B 的事务。现在在 jta 事务中,我有一个从数据库 A 返回实体的方法。我想如何为某个主键设置一些不同的值(主键是复合主键),然后将实体保留为新
我有一个小型学习项目,比如测验 API。当我尝试保存复杂对象(考试)时,hibernate 抛出 EntityExistsException。我使用 dto (CreateExamRequestDto
我使用迭代来保存集合中的所有实体。然后我就有这个问题了。我尝试了persist()和merge(),但实体的Id似乎从未改变。如果有人能提供帮助,我将不胜感激。 我的道 @Repository pub
// lookup existing user & set a currently null child entity (ContactInfo) user.setContactInfo(contac
我花了很多时间寻找这个错误,但我无法解决这个问题。 我在 Hibernate 和 Postgre 中使用 spring JPA。 我有两个实体 Location 和 Ap: CREATE TA
我有两个实体(A 和 B)。 A 与实体 B 具有一对多关系。实体 A 的主键是自增的,而实体 B 的主键是复合的(由实体 A 的 PK 作为外键和一个自增 id 组成)。 注意:我正在使用 EJB
我是一名优秀的程序员,十分优秀!