gpt4 book ai didi

java - Hibernate:@EmbeddedId、继承和@SecondaryTable

转载 作者:塔克拉玛干 更新时间:2023-11-02 07:57:42 25 4
gpt4 key购买 nike

我正在使用带注释的 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
}

现在,当我在子类上创建查询时,会在父类(super class)上搜索 FIELD_1 和 FIELD_2 字段,即使它们是在子类中定义的。

我无法在字段中的@Column注解中设置表格,因为Field类在某处被重用了。我需要在 SubClass 类中指定它。

如何指定在副表中查找该字段?

也在 Hibernate Forum

最佳答案

你应该使用table属性

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

更新

当一个可嵌入列被多个实体使用时,如果您只需要重新映射一个列,则应使用@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; }

}

}

关于java - Hibernate:@EmbeddedId、继承和@SecondaryTable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4155372/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com