说明
@SecondaryTables在实际中很少使用。相当于是将一个entity的基础属性(不是collection)拆分到不同表中存放。这在表格设计中是不合理的。常用于遗留数据库,以及表格列太多查出数据库供应商的限制。
和OneToOne不同,没有使用外键进行表格关联,而是两个表的主键代表同样含义。
小例子数据库表格
CREATE TABLE Employee (
EmployeeId BIGINT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
FirstName VARCHAR(50) NOT NULL,
LastName VARCHAR(50) NOT NULL
) ENGINE = InnoDB;
-- 一般第二个表格的主键和主表的主键名字是一样的,小例子采用不一样的方式
CREATE TABLE Employee2 (
Employee_Id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
NickName VARCHAR(50) DEFAULT NULL
) ENGINE = InnoDB;
Entity的代码
@Entity
@Table(name = "Employee")
//如果Employee2的主键的名字同主表主键的名字,就无需设置pkJoinColumns
@SecondaryTables({
@SecondaryTable(name="Employee2", pkJoinColumns = {
@PrimaryKeyJoinColumn(name = "Employee_Id",referencedColumnName = "EmployeeId")
})
})
public class MyEmployee {
private long id;
private String firstName;
private String lastName;
private String nickName;
@Id
@Column(name="EmployeeId")
@GeneratedValue(strategy = GenerationType.IDENTITY)
public long getId() { 。。。}
@Basic
public String getFirstName() { ... }
@Basic
public String getLastName() { ... }
//缺省是主表,如果是第二表,需要指明
@Basic
@Column(name = "NickName", table = "Employee2")
public String getNickName() { ... }
... setters ...
}
相关链接:我的Professional Java for Web Applications相关文章