Как динамически установить имя @Column в Hibernate - PullRequest
0 голосов
/ 11 июня 2018

Я пытаюсь динамически установить имя столбца в классе (указанном ниже), но в @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.

Я уже ссылаюсь на ссылки ниже: 1 , 2 , 3 , * 1 020 * 4 , * тысяче двадцать-два * 5 , 6 * 1 025 *, 7 * 1 027 *, 8* тысяча двадцать-девять *, 9 , * 1 032 * 10 , 11 , 12 , 13 , 14 * +1041*, * тысяча сорок-дв * 15 * тысяча сорок-три *, * +1044 * 16 , 17 * 1 047 *, 18 , 19 * тысячи пятьдесят-один *, * 1 052 * 20 * тысячи пятьдесят-три *, 21 , 22 * ​​1057 *, 23

Моя цель: я создаю 10 таблиц, и все таблицы содержат столбец created, но префикс с разнымизначение, установленное в соответствии с классом модели данных.

для примера: таблицы abc и qwe таблица abc имеет id, a_column (varchar) и таблица qwe имеет id, q_column (varchar)

Использование @Transient Я получил ошибку:

transient error

Ответы [ 2 ]

0 голосов
/ 13 июня 2018

Ниже код является решением для вас:

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

Жду от вас комментариев. Спасибо

0 голосов
/ 11 июня 2018

Просто вы не можете, отображение hibernate будет оцениваться при инициализации bean-компонентов, которые находятся в запуске вашего приложения.

...