我的实体具有与另一个表具有一对一连接的字段。如何为该字段设置默认值。我试图做这样的事情
@Column(columnDefinition = "int default 5")
@OneToOne(cascade = CascadeType.ALL)
private Admin admin;
但是我收到了这个错误
@Column(s) not allowed on a @OneToOne
有没有办法在不改变SQL中的表的情况下实现这一点?
编辑:
改变了一些东西。现在我有这样的代码。
@ManyToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "admin_id", referencedColumnName = "id", nullable = false, columnDefinition = "bigint(20) DEFAULT 5")
private Admin admin;
我还添加了@DynamicInsert
和@DynamicUpdate
,但它仍无效。我还想注意那些Admin对象已经存在于DB中,我不想再创建它们。
答案 0 :(得分:1)
如果一个管理员(5)可以拥有多个实体,您最好使用 @ManyToOne 关系,这可能如下所示:
@ManyToOne
@JoinColumn(name="ID")
private Admin admin;
每次创建实体时,最好从数据库中获取,这样就不会得到LazyLoadingException,如下所示:
Admin admin = adminService.getDefaultAdmin(); //returns 'select a from Admin a where id = 5'
Entity entity = new Entity();
..fill the fields
entity.setAdmin(admin);
entityService.save(entity);
通过这种方式,您将确保访问过最新版本的管理员,这样您就不会覆盖管理员的任何字段,或者您不必担心级联。