我正在尝试在一个类中动态设置列名(如下所示),但在@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;
}
请建议我从pre_col_name_created
中的其他班级动态提供@Column
值。
我已在下面的链接中提及:1,2,3,4,5,6,7 ,8,9,10,11,12,13,14,15,{ {3}},16,17,18,19,20,21,22
我的目标是:我创建了10个表,所有表都包含created
列,但前缀具有根据数据模型类设置的不同值。
表示:
表格abc
和qwe
表abc
包含id
,a_column
(varchar)和
表qwe
包含id
,q_column
(varchar)
使用@Transient
我收到错误:
答案 0 :(得分:1)
简单地说,在初始化应用程序启动时的datasrouce bean时,将评估hibernate映射。
答案 1 :(得分:1)
以下代码是您的解决方案:
<强> Test.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中,您可以定义所需公共列的类型。
我在等你评论。谢谢