有A類,如:休眠保存/更新級聯
class A {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Basic(optional = false)
@Column(name = "DBId")
private Long DBId = null;
@OneToMany(cascade = CascadeType.ALL)
@LazyCollection(LazyCollectionOption.FALSE)
List<B> list;
}
和B類像
class B {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Basic(optional = false)
@Column(name = "DBId")
private Long DBId = null;
}
當我想要堅持A類的新實例,兩種情況都是可能的。 1- B在A中的所有實例是新的,在這種情況下,一個簡單的session.save(A)是確定。 2-一些或全部在A中的B的實例是舊的。我應該如何保存A以免重複Bs。請saveOrUpdate解決問題?或者它只是決定選擇保存或只是在尋找一個更新,例如,如果A是新的,它也將呼籲節省燒烤,並且如果是舊的,它也將呼籲更新上燒烤?
此外,我看到我的代碼中只有一個簡單的session.save(A),並且它沒有產生多餘的Bs。我錯了嗎?這可能嗎?
問候
UPDATE:老B的情況下,老B的實例連接到會話,DBID設置正確。
你應該看看Hibernate的痕跡:如果啓用了SQL跟蹤,你會看到Hibernate生成的所有SQL語句,以知道如何處理Bs。 – eternay
是的,我認爲應該saveOrUpdate幫助你。你試過這個嗎? – dosdebug
還沒有。但爲什麼不保存製造問題? – Shayan