我正在使用Hibernate 5和Spring 3.2.4。我設計了一個用戶實體,我想在其中包含對創建該實體的用戶的引用 - 所以這是一個自引用。自引用本身不是太有問題,但我想將該字段指定爲非null。這可能嗎?如果字段非空,那麼如何在數據庫中創建第一個條目,因爲引用的實體尚不存在?Hibernate自引用實體爲非空列
例:
@Entity
public class User {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "id")
private Long User.id;
@NotNull
private String username;
private String password;
@NotNull
private User user;
// getters and setters omitted for brevity
}
如果我嘗試:
User u = new User();
u.setUsername("username");
u.setCreatedBy(u);
,並嘗試堅持u
,我收到以下錯誤信息:
Caused by: org.hibernate.TransientPropertyValueException: Not-null property references a transient value - transient instance must be saved before current operation: com.domain.User.createdBy -> com.domain.User
我明白Hibernate的抱怨它不能引用一個瞬態實例(即:u
),但我不能rsist u
除非我有一個我可以參考的非空用戶。但是在一個空的DB中,沒有這樣的入口。
這種配置是不可能做到的嗎?或者有沒有辦法解決這個問題?
您是否試過用@ManyToOne指定映射?此外,我沒有看到標識符字段,您是否像引用者一樣省略了它? –
@ elusive-code - 我更新了沒有'@ Roo'註解的實體以顯示其他文件。是的 - 爲了簡潔起見,我已經省去了獲取者/設置者。根據我的理解,@ManyToOne和@NotNull之間的區別在於@ManyToOne將用於DDL生成中,並且在持久化bean時,即使不持久化Bean,@NotNull也可用於bean驗證。 –