gpt4 book ai didi

java - 加入列的 Hibernate 合并问题

转载 作者:行者123 更新时间:2023-11-30 22:13:20 25 4
gpt4 key购买 nike

我将 java 8 与 JPA2/Hibernate5 和 mySql 一起使用。

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

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

entityManager.merge(rating);

我收到以下错误:

Duplicate entry 'richardmarais' for key 'USERNAME_UNIQUE'

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

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

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

但是我得到:

There was an error trying to save Rating [null]. Multiple representations of the same entity [com.jobs.spring.domain.Person#8] are being merged. Detached: [com.jobs.spring.domain.Person@30466c01]; Managed: [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;

但是在启动时我明白了。

@Column(s) not allowed on a @ManyToOne property: com.jobs.spring.domain.Rating.person

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

最佳答案

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

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

关于java - 加入列的 Hibernate 合并问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39291899/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com