簡體   English   中英

Hibernate:@ EmbeddedId,Inheritance和@SecondaryTable

[英]Hibernate: @EmbeddedId, Inheritance and @SecondaryTable

我正在使用帶有注釋的Hibernate版本3.3.2.GA。

我有兩個類之間的繼承,前者:

@Entity
@Table(name = "SUPER_CLASS")
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(
    name="DISCR_TYPE",
    discriminatorType= DiscriminatorType.STRING
)
@org.hibernate.annotations.Entity(mutable = false)
public class SuperClass { }

子類與輔助表映射:

@Entity
@DiscriminatorValue("VALUE")
@org.hibernate.annotations.Entity(mutable = false)
@SecondaryTable(name = "V_SECONDARY_TABLE",
        pkJoinColumns = @PrimaryKeyJoinColumn(name = "ID", referencedColumnName = "ID"))
public class SubClass extends SuperClass  { 
 @Embedded
    public Field getField() {
        return getField;
    }
}

場地由兩個不同的領域組成

@Embeddable
public class Field { 
 @Column("FIELD_1") String field1
 @Column("FIELD_2") String field2
}

現在,當我在SubClass上創建查詢時,在SuperClass上搜索FIELD_1和FIELD_2字段,即使它們是在子類中定義的。

我無法在字段中的@Column注釋中設置表,因為它在某處重用了Field類。 我需要在SubClass類中指定它。

如何指定應在輔助表中搜索字段?

也在Hibernate論壇上

您應該使用屬性

@Column("FIELD_1", table="V_SECONDARY_TABLE")

UPDATE

當多個實體使用可嵌入列時,如果需要僅重新映射單個列,則應使用@AttributeOverride;如果需要多個列,則應使用@AttributeOverrides

@Entity
@SecondaryTable(name="OTHER_PERSON")
@AttributeOverride(name="address.street", column=@Column(name="STREET", table="OTHER_PERSON"))
public class Person {

    private Address address;

    @Id
    @GeneratedValue
    public Integer getId() { return id; }
    public void setId(Integer id) { this.id = id; }

    @Embedded
    public Address getAddress() { return address; }
    public void setAddress(Address address) { this.address = address; }

    @Embeddable
    public static class Address implements Serializable {

        private String address;

        public String getStreet() { return street; }
        public void setStreet(String street) { this.street = street; }

    }

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM