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

标签 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

请建议我从 @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 列,但前缀具有根据数据模型类设置的不同值。

例如: 表 abcqweabcida_column(varchar) 和 表 qweid, q_column(varchar)

使用 @Transient 我得到了错误:

transient error

最佳答案

下面的代码是适合你的解决方案:

测试.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)列的类型。

数据库截图如下: screenshot

我在等你评论。谢谢

关于java - 如何在 Hibernate 中动态设置@Column 名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50795539/

相关文章:

java - 在 Java 应用程序示例中嵌入 Avatar JS

java - 不用Entity类通过Hibernate获取数据

java - org.hibernate.PropertyAccessException - 如何从数据库中获取空值?

JAVA JPA更新相关实体

java - CrudRepository - 由于参数类型/数量问题,存储过程调用不起作用

java - 如何在Java中将全角日语字符转换为半角日语字符?

java - 我们如何在cacheManager中管理多个用户...

java - NamedQuery 未将表置于 OnetoOne 关系中

java - Hibernate:检查哪个实体的字段被修改

java - 使用 jsoup 获取 java.net.SocketTimeoutException : Read timed out exception