如何在@Entity对象字段中设置默认值

时间:2017-01-02 10:16:50

标签: java spring spring-boot

我的实体具有与另一个表具有一对一连接的字段。如何为该字段设置默认值。我试图做这样的事情

    @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中,我不想再创建它们。

1 个答案:

答案 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);

通过这种方式,您将确保访问过最新版本的管理员,这样您就不会覆盖管理员的任何字段,或者您不必担心级联。