我有一个表有两个外键到两个不同的表,两个外键共享一列:
CREATE TABLE ZipAreas
(
country_code CHAR(2) NOT NULL,
zip_code VARCHAR(10) NOT NULL,
state_code VARCHAR(5) NOT NULL,
city_name VARCHAR(100) NOT NULL,
PRIMARY KEY (country_code, zip_code, state_code, city_name),
FOREIGN KEY (country_code, zip_code) REFERENCES Zips (country_code, code),
FOREIGN KEY (country_code, state_code, city_name) REFERENCES Cities (country_code, state_code, name)
)
Run Code Online (Sandbox Code Playgroud)
如您所见,有两个FK共享country_code(巧合地引用了引用路径末尾的同一列).实体类看起来像(JPA 1.0 @IdClass):
@Entity
@Table(name = "ZipAreas")
@IdClass(value = ZipAreaId.class)
public class ZipArea implements Serializable
{
@Id
@Column(name = "country_code", insertable = false, updatable = false)
private String countryCode;
@Id
@Column(name = …Run Code Online (Sandbox Code Playgroud) 我有2个Java类,Relation并且Person,它们都存在于我的数据库.
人:
@Entity
@Table(name = "persons")
public class Person {
@Id
@Column
private int id;
@Column
private String name;
@OneToMany(fetch = FetchType.EAGER)
@JoinColumns({
@JoinColumn(name = "slave_id", referencedColumnName="id"),
@JoinColumn(name = "master_id", referencedColumnName="id")
})
private List<Relation> relations;
//Getters and setters
}
Run Code Online (Sandbox Code Playgroud)
关系:
@Entity
@Table(name = "relations")
public class Relation {
@Id
@Column
private int id;
@Column
private int child_id;
@Column
private int parent_id;
@Column
private String type;
//Getters and setters
}
Run Code Online (Sandbox Code Playgroud)
每个Person都有一个关系列表(或不关系),当关系的child_id或parent_id等于person的id时,应该将关系添加到列表中.
TL; DR:当relation.child_id OR relation.parent_id = …
我是hibernate的新手.我需要了解以下问题:
(1)什么是hibernate映射中的subselect?
(2)如何在hbm文件中映射subselect?
(3)如果我使用subselect检索值,那么如何在java Action类中获取检索到的值.