【问题标题】:Hibernate Merge Issue with joined column加入列的休眠合并问题
【发布时间】:2017-01-10 12:58:13
【问题描述】:

我正在使用带有 JPA2/Hibernate5 和 mySql 的 java 8。

+--------+    +----------------+    +------------+ 
| Rating |    | Rating_Person  |    | Person     |
+--------+    +----------------+    +------------+ 
| ID     |    | RAT_ID         |    | ID         |
| PERSON |    | PER_ID         |    | USERNAME   | 
+--------+    +----------------+    +------------+

我有一个实体RATING,它有一个PERSON 对象。当我尝试merge RATING 时,它会出现错误,因为数据库中已经有一个 PERSON 具有唯一列值 USERNAME

entityManager.merge(rating);

我收到以下错误:

键“USERNAME_UNIQUE”的重复条目“richardmarais”

看来我不需要尝试添加新的PERSON。我什至不需要更新PERSON

我尝试将我的代码更新为:

    Person person = rating.getPerson();
    Person dbPerson = personService.findByUserName(person.getUserName());
    if (dbPerson != null) {
        rating.setPerson(dbPerson);
    }
    entityManager.merge(rating);

但我明白了:

尝试保存评级 [null] 时出错。多种的 同一实体的表示 [com.jobs.spring.domain.Person#8] 正在合并。分离:[com.jobs.spring.domain.Person@30466c01]; 托管:[com.jobs.spring.domain.Person@7c2ba1a2]

谁能告诉我如何在不添加新的PERSON 的情况下添加新的RATING

我尝试在PERSON 对象上添加@Column 注释,告诉它不要添加新的PERSON

@ManyToOne(cascade = CascadeType.ALL, fetch=FetchType.EAGER)
@JoinTable
(
    name="rating_person",
    joinColumns={ @JoinColumn(name="RAT_ID", referencedColumnName="ID") },
    inverseJoinColumns={ @JoinColumn(name="PER_ID", referencedColumnName="ID") }
)
@Column(insertable = false, updatable = false)
private Person person;

但是在启动时我得到了。

@ManyToOne 属性上不允许使用@Column: com.jobs.spring.domain.Rating.person

当我阅读RATING 实体时,我确实需要获取关联的PERSON

【问题讨论】:

    标签: java mysql hibernate jpa orm


    【解决方案1】:

    如果我先设置连接的实体,它会起作用。

        Person person = personDao.findById(rating.getPerson().getId());
        Job job = jobDao.findById(rating.getJob().getId());
        rating.setPerson(person);
        rating.setJob(job);
        rating = super.merge(rating);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-09-27
      • 1970-01-01
      • 1970-01-01
      • 2012-02-09
      • 1970-01-01
      • 2017-02-19
      相关资源
      最近更新 更多