我正在尝试在类中动态设置列名称(如下所示),但在 @Column
中它需要常量值作为名称。
public class Common
{
final String pre_col_name_created;
public Common( String pre_col_name )
{
this.pre_col_name_created = pre_col_name;
}
@Column( name = pre_col_name_created + "" )
private String created;
}
请建议我从 @Column
中的其他类动态地给 pre_col_name_created
值。
我已经引用了以下链接:1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 , 11 , 12 , 13 , 14 , 15 , 16 , 17 , 18 , 19 , 20 , 21 , 22 , 23
我的目标是:我正在创建 10 个表,所有表都包含 created
列,但前缀具有根据数据模型类设置的不同值。
例如:
表 abc
和 qwe
表 abc
有 id
、a_column
(varchar) 和
表 qwe
有 id
, q_column
(varchar)
使用 @Transient
我得到了错误:
最佳答案
下面的代码是适合你的解决方案:
测试.java
@Entity
@Filter(
name = "tenancyFilter",
condition = "et_created = :created"
)
@AttributeOverride(
name = "created",
column = @Column(
name = "et_created"
)
)
public class Test extends Common
{
@Id
@Column( name = "comp_id" )
private UUID id;
public UUID getId()
{
return id;
}
public void setId( UUID id )
{
this.id = id;
}
}
Common.java
@MappedSuperclass
@EntityListeners( { AuditingEntityListener.class})
@FilterDef(
name = "tenancyFilter",
parameters = {@ParamDef(
name = "created",
type = "timestamp"
)}
)
public class Common
{
private Timestamp created;
public Timestamp getCreated()
{
return created;
}
public void setCreated( Timestamp created )
{
this.created = created;
}
}
在上面的代码中有 Test 类,您可以将其用作要更改列名称的类,在类 Common 中,您可以定义所需的公共(public)列的类型。
我在等你评论。谢谢
关于java - 如何在 Hibernate 中动态设置@Column 名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50795539/