如何在Hibernate中动态设置@Column名称

时间:2018-06-11 10:22:58

标签: java hibernate jpa data-modeling

我正在尝试在一个类中动态设置列名(如下所示),但在@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;
}

上面的代码给了我错误:Attribute value must be constant

请建议我从pre_col_name_created中的其他班级动态提供@Column值。

我已在下面的链接中提及:123456789101112131415,{ {3}},16171819202122

我的目标是:我创建了10个表,所有表都包含created列,但前缀具有根据数据模型类设置的不同值。

表示: 表格abcqweabc包含ida_column(varchar)和 表qwe包含idq_column(varchar)

使用@Transient我收到错误:

23

2 个答案:

答案 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中,您可以定义所需公共列的类型。

以下是数据库的截图: screenshot

我在等你评论。谢谢