Java for Web学习笔记(一三四)映射(10)@SecondaryTables

说明

@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相关文章

猜你喜欢

转载自blog.csdn.net/flowingflying/article/details/81540503