有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java覆盖@CollectionTable

我需要覆盖JPA中的collectiontable?也许有人有主意

 public class nationality{
       @Embedded
       @AttributeOverrides({
              @AttributeOverride(name="language.language", column = @Column(name="code_lang")) })
       private Language language;
    .....

语言课

@Embeddable
public class Language{
  @ElementCollection(fetch = FetchType.Eager)
  @CollectionTable(name="nat", joinColumns = @JoinColumn(name = "id"))
  private Collection<LanguageObj> language;
...
}

这正在工作,但@CollectionTable链接必须发生在National类中。如何做到这一点

类语言必须被从不同表获取数据的其他类重用。 问题是表中已经存在数据,因此无法编辑该表 比如从国家表格中获取数据的国家

public class country{
       @Embedded
       @AttributeOverrides({
              @AttributeOverride(name="language.language", column = @Column(name="code_country")) })
       private Language language;
    .....
}

共 (2) 个答案

  1. # 1 楼答案

    以下是解决方案
    总体思路是:
    1.在可嵌入对象注释集合字段中,使用@ElementCollection
    2.在实体中,用@CollectionTable注释集合getter。getter应该转发给Embeddeble的getter。对于每个实体,可以在@CollectionTable注释中指定单独的表名

    enum DayOfWeek {
        MONDAY,TUESDAY,...
    }
    
    @Embeddable
    class ScheduleProperties {
        ...
        @ElementCollection
        private List<DayOfWeek> daysOfWeek;
        ...
        public List<DayOfWeek> getDaysOfWeek() {
            return daysOfWeek;
        }
    }
    
    @Entity
    class SomeEntity {
        ...
        @Embedded
        private ScheduleProperties embd = new ScheduleProperties();
        ...
        @CollectionTable(name="some_entity_days_of_week")
        public List<DayOfWeek> getDaysOfWeek() {
            return embd.getDaysOfWeek();
        }
    }
    
    @Entity
    class AnotherEntity {
        ...
        @Embedded
        private ScheduleProperties embd = new ScheduleProperties();
        ...
        @CollectionTable(name="another_entity_days_of_week")
        public List<DayOfWeek> getDaysOfWeek() {
            return embd.getDaysOfWeek();
        }
    }
    
  2. # 2 楼答案

    像使用@AttributeOverride(s)一样使用@AssociationOverride(s)

    @AssociationOverride(name = "language",
                         joinTable = @JoinTable(name = "nat",
                                                joinColumns = @JoinColumn(name = "id")))