`
forge
  • 浏览: 22709 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

五.对象关系映射-part4

    博客分类:
  • JPA
JPA 
阅读更多

 

一、嵌入对象


在“复合主键”章节中,我们看到了怎样用嵌入对象和 @EmbeddedId 注解。

嵌入对象自己没有持久化 ID ,共享被嵌入实体类的 ID 。如果该实体类被删除,嵌入对象也被删除。


请看下例:

 

 

@Embeddable
public class Address {
	private String street1;
	private String street2;
	private String city;
	private String state;
	private String zipcode;
	private String country;
	// Constructors, getters, setters
}

 

@Entity
public class Customer {
	@Id
	@GeneratedValue
	private Long id;
	private String firstName;
	private String lastName;
	private String email;
	private String phoneNumber;
	@Embedded
	private Address address;
	// Constructors, getters, setters
}
 

 

每一个 Address 的属性都会被映射到实体类 Customer 对应的表中。


产生的 DDL

 

CREATE TABLE `customer` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `city` varchar(255) DEFAULT NULL,
  `country` varchar(255) DEFAULT NULL,
  `state` varchar(255) DEFAULT NULL,
  `street1` varchar(255) DEFAULT NULL,
  `street2` varchar(255) DEFAULT NULL,
  `zipcode` varchar(255) DEFAULT NULL,
  `email` varchar(255) DEFAULT NULL,
  `firstName` varchar(255) DEFAULT NULL,
  `lastName` varchar(255) DEFAULT NULL,
  `phoneNumber` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id`)
) 

 

 

 

二、嵌入对象类的访问类型


一个嵌入对象类的访问类型默认由被其嵌入的实体类访问类型决定。如果实体类显示使用属性访问类型,嵌入对象将隐式同样使用属性访问。如果想让嵌入对象有不同的访问类型,可以通过 @Access 注解指定。


看下例: Customer 实体和 Address 实体有不同的访问类型。

 

@Entity
@Access(AccessType.FIELD)
public class Customer {
	@Id
	@GeneratedValue
	private Long id;
	@Column(name = "first_name", nullable = false, length = 50)
	private String firstName;
	@Column(name = "last_name", nullable = false, length = 50)
	private String lastName;
	private String email;
	@Column(name = "phone_number", length = 15)
	private String phoneNumber;
	@Embedded
	private Address address;
	// Constructors, getters, setters
}

 

@Embeddable
@Access(AccessType.PROPERTY)
public class Address {
	private String street1;
	private String street2;
	private String city;
	private String state;
	private String zipcode;
	private String country;

	// Constructors
	@Column(nullable = false)
	public String getStreet1() {
		return street1;
	}

	public void setStreet1(String street1) {
		this.street1 = street1;
	}

	public String getStreet2() {
		return street2;
	}

	public void setStreet2(String street2) {
		this.street2 = street2;
	}

	@Column(nullable = false, length = 50)
	public String getCity() {
		return city;
	}

	public void setCity(String city) {
		this.city = city;
	}

	@Column(length = 3)
	public String getState() {
		return state;
	}

	public void setState(String state) {
		this.state = state;
	}

	@Column(name = "zip_code", length = 10)
	public String getZipcode() {
		return zipcode;
	}

	public void setZipcode(String zipcode) {
		this.zipcode = zipcode;
	}

	public String getCountry() {
		return country;
	}

	public void setCountry(String country) {
		this.country = country;
	}
}

 

 

显示的设置嵌入对象的访问类型是极力推荐的,这样会避免嵌入对象被嵌入到多个实体类中产生映射问题。

 

分享到:
评论

相关推荐

    精通 Hibernate:Java 对象持久化技术详解(第2版).part2

     2.2.1 对象-关系映射的概念  2.2.2 ORM中间件的基本使用方法  2.2.3 常用的ORM中间件  2.3 实体域对象的其他持久化模式  2.3.1 主动域对象模式  2.3.2 JDO模式  2.3.3 CMP模式  2.4 Hibernate API简介  ...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part4

     2.2.1 对象-关系映射的概念  2.2.2 ORM中间件的基本使用方法  2.2.3 常用的ORM中间件  2.3 实体域对象的其他持久化模式  2.3.1 主动域对象模式  2.3.2 JDO模式  2.3.3 CMP模式  2.4 Hibernate API简介  ...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part1.rar

     2.2.1 对象-关系映射的概念  2.2.2 ORM中间件的基本使用方法  2.2.3 常用的ORM中间件  2.3 实体域对象的其他持久化模式  2.3.1 主动域对象模式  2.3.2 JDO模式  2.3.3 CMP模式  2.4 Hibernate API简介  ...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part3

     2.2.1 对象-关系映射的概念  2.2.2 ORM中间件的基本使用方法  2.2.3 常用的ORM中间件  2.3 实体域对象的其他持久化模式  2.3.1 主动域对象模式  2.3.2 JDO模式  2.3.3 CMP模式  2.4 Hibernate API简介  ...

    精通Hibernate:对象持久化技术第二版part3

    2.2.1 对象-关系映射的概念29 2.2.2 ORM中间件的基本使用方法 31 2.2.3 常用的ORM中间件 33 2.3 实体域对象的其他持久化模式 34 2.3.1 主动域对象模式 35 2.3.2 JDO模式 37 2.3.3 CMP模式 37 2.4 Hibernate ...

    JavaAPI中文chm文档 part2

    javax.sql.rowset.serial 提供实用工具类,允许 SQL 类型与 Java 编程语言数据类型之间的可序列化映射关系。 javax.sql.rowset.spi 第三方供应商在其同步提供者的实现中必须使用的标准类和接口。 javax.swing 提供...

    精通hibernate:对象持久化技术孙卫琴第二版part2

    2.2.1 对象-关系映射的概念29 2.2.2 ORM中间件的基本使用方法 31 2.2.3 常用的ORM中间件 33 2.3 实体域对象的其他持久化模式 34 2.3.1 主动域对象模式 35 2.3.2 JDO模式 37 2.3.3 CMP模式 37 2.4 Hibernate ...

    JavaAPI1.6中文chm文档 part1

    javax.sql.rowset.serial 提供实用工具类,允许 SQL 类型与 Java 编程语言数据类型之间的可序列化映射关系。 javax.sql.rowset.spi 第三方供应商在其同步提供者的实现中必须使用的标准类和接口。 javax.swing 提供...

    xml入门经典-part3(中文版)

    3.5.2 对象关系问题 3.5.3 进一步讨论 3.6 小结 第4章 数据建模与XML 4.1 信息建模 4.1.1 静态模型和动态模型 4.1.2 文档和数据 4.1.3 从何处开始 4.1.4 静态信息模型 4.1.5 动态建模:对数据进行哪些处理...

    UNIX环境高级编程_第2版.part1

    16.3.4 将套接字与地址绑定449 16.4 建立连接450 16.5 数据传输452 16.6 套接字选项464 16.7 带外数据466 16.8 非阻塞和异步i/o 467 16.9 小结468 习题468 第17章高级进程间通信469 17.1 引言469 17.2 ...

    UNIX环境高级编程_第2版.part2

    16.3.4 将套接字与地址绑定449 16.4 建立连接450 16.5 数据传输452 16.6 套接字选项464 16.7 带外数据466 16.8 非阻塞和异步i/o 467 16.9 小结468 习题468 第17章高级进程间通信469 17.1 引言469 17.2 ...

Global site tag (gtag.js) - Google Analytics