我有 2 張桌子
- 用戶
- 網址
我正在嘗試在所述 2 個表之間建立關系。一個用戶可以有多個 url,但一個 url 只能屬于一個用戶。
在我看來,這聽起來像是 OneToMany 關系。
我的用戶物體如下(洗掉了一些代碼以免它太長):
public class User{
@OneToMany(
mappedBy = "user",
cascade = CascadeType.ALL,
orphanRemoval = true
)
private final List<RssUrl> rssUrls = new ArrayList<>();
public void addRssUrl(RssUrl rssUrl) {
rssUrls.add(rssUrl);
rssUrl.setUser(this);
}
public void removeComment(RssUrl rssUrl) {
rssUrls.remove(rssUrl);
rssUrl.setUser(null);
}
我的 Url 物體如下(洗掉了一些代碼以免它太長):
public class RssUrl {
@ManyToOne(fetch = FetchType.LAZY)
private User user;
我一直在關注我在這里找到的一個相對簡單的指南。
現在我的問題是:如何保存擁有方物體?
假設我已經創建了一個用戶。
User user = getCurrentUserDetails();
我為該用戶添加了一個新網址
user.addRssUrl(rssUrl);
現在呢?
我試過了
User user = getCurrentUserDetails();
user.addRssUrl(rssUrl);
rssUrlRepository.save(rssUrl);
但這會導致錯誤:
org.hibernate.TransientPropertyValueException: object references an unsaved transient instance - save the transient instance before flushing
當然,我可能把這一切都搞錯了,也許我的關系一開始就不正確?
我對想法非常開放。
uj5u.com熱心網友回復:
User您正確配置和之間的關系Url。它主要在保存時抱怨Url,它User是一個新記錄。
如果您保存第一個,則可以解決該問題User:
User user = getCurrentUserDetails();
user.addRssUrl(rssUrl);
userRepository.save(user);
rssUrlRepository.save(rssUrl);
但是由于您已經配置cascade為 ALL for ,因此應用User的Url所有 JPA 操作User也會自動應用到其上Url,這意味著您可以簡單地執行以下操作:
User user = getCurrentUserDetails();
user.addRssUrl(rssUrl);
userRepository.save(user);
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/419234.html
標籤:
上一篇:無法建立HibernateSessionFactory;嵌套例外是org.hibernate.MappingException:無法確定型別:java.util.Set,在表:
