2017-01-02 460 views
0

我的实体具有与另一个表具有一对一连接的字段。我如何设置该字段的默认值。我试图以这样的如何在@Entity对象字段中设置默认值

@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对象已经存在于数据库中,我不想再次创建它们。

+0

你有没有''@JoinColumn(name =“xxx”)''? –

+1

所以Admin表默认PK是5? – HRgiger

+0

你应该通过从数据库中加载Admin对象来在你的构造函数中设置它,因为5可能不是每个环境中的pk。 –

回答

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

这样,您将确保您访问最新版本管理的,所以你将不会覆盖管理的任何领域,或者您不必担心的级联。

相关问题