Eri*_* B. 5 java persistence hibernate jpa hibernate-5.x
我正在使用 Hibernate 5 和 Spring 3.2.4。我正在设计一个用户实体,我想在其中包含对创建实体的用户的引用 - 所以是自我引用。自引用本身并没有太大问题,但我想将该字段指定为非空。这可能吗?如果该字段不为空,因为引用的实体不存在,如何在数据库中创建第一个条目?
前任:
@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
}
Run Code Online (Sandbox Code Playgroud)
如果我尝试:
User u = new User();
u.setUsername("username");
u.setCreatedBy(u);
Run Code Online (Sandbox Code Playgroud)
并尝试坚持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
Run Code Online (Sandbox Code Playgroud)
我知道 Hibernate 抱怨它无法引用瞬态实例(即:)u,但u除非我有一个可以引用的非空用户,否则我无法坚持。但是在一个空的数据库中,没有这样的条目。
这种配置是不可能做到的吗?或者有没有办法解决这个问题?
我不明白这个 Roo 注释,并且我不使用 Hibernate 特定的注释,只使用 JPA。我对自我参考没有任何问题。但我有一些提示给你:
@ManyToOne注释。@NotNull注释(或nullable中的字段@Column)不影响映射,只影响 DDL 生成。我不使用域模型生成 DDL,我从来没有指定过这一点吗?相反,我optional使用@ManyToOne.NOT NULL。因此,要么使用基于序列的标识符生成器,要么删除约束。我会先用。optional字段设置为@ManyToOneto 。否则,Hibernate 会尝试进行两个查询:插入并设置为,然后更新。并且第一个查询在启用约束的情况下失败。falseNOT NULLcreatedBy_idNULLcreatedBy_idNOT NULL| 归档时间: |
|
| 查看次数: |
2190 次 |
| 最近记录: |