`
forge
  • 浏览: 23030 次
  • 性别: 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程序高手秘笈.part01-03.rar

    3. 实体类与对象关系映射:讲解如何定义Java实体类,并使用注解或XML文件进行对象关系映射,包括基本类型映射、关联映射(一对一、一对多、多对一、多对多)和继承映射。 4. Session与Transaction:介绍Hibernate的...

    ssm-spring-part.rar

    - **数据访问集成(Data Access/Integration)**:Spring提供了JDBC抽象层,简化了数据库操作,同时支持ORM(对象关系映射)框架如Hibernate和MyBatis。 - **MVC框架(Model-View-Controller)**:Spring MVC是...

    struts-2.3.1.2-part2.rar

    而Hibernate作为持久层框架,简化了数据库操作,提供了ORM(对象关系映射)功能。 SSH框架的整合使得开发者能够更有效地管理应用程序的各个层次,实现松耦合、高复用的设计。例如,通过Spring的DI,可以轻松地更换...

    Hibernate程序高手秘笈.part07-09.rar

    这部分内容主要包含Part07和Part09两个部分,旨在帮助开发者提升在数据库操作和对象关系映射方面的技能。 Part07可能涉及的主题包括: 1. **持久化策略**:讲解了Hibernate的各种持久化策略,如懒加载(Lazy ...

    Hibernate程序高手秘笈.part04-06.rar

    3. **映射文件详解**:详细讲解XML或注解方式的实体映射,包括属性映射、关系映射(一对一、一对多、多对多)、继承映射等。 4. **HQL(Hibernate Query Language)**: Hibernate自己的查询语言,类似于SQL,但更...

    Linq-To-Sql-Part_2-Define-Data-Model-Class

    总结来说,“Linq-To-Sql-Part_2-Define-Data-Model-Class”这个主题将指导你如何使用LINQ to SQL创建数据模型类,理解对象关系映射原理,以及如何编写查询和管理数据库交互。了解这些知识点后,你可以更有效地在...

    Hibernate程序高手秘笈.part10-11.rar

    5. **多对多关系映射**:详述如何配置和处理多对多关联,包括中间表的管理,以及集合的懒加载和级联操作。 6. **一对一关系映射**:深入讨论一对一关系的配置,包括外键约束、主键共享以及一对一关系的级联操作。 ...

    hibernate-distribution-3.3.1.part4

    Hibernate是一个广泛使用的Java库,用于将对象关系映射(ORM)到关系数据库,简化数据库操作,让开发者可以使用面向对象的方式来处理数据库。 在Java世界中,ORM工具如Hibernate消除了手动编写SQL语句的需要,使得...

    extjs+struts+hibernate+spring(物流管理系统)-part3

    通过ORM(对象关系映射),它将Java对象映射到数据库表,使得开发者可以使用面向对象的方式来操作数据库。 - Spring:是Java企业级应用开发的核心框架,提供依赖注入、AOP(面向切面编程)、事务管理等功能,使得...

    mingrisoft-part4

    ADO.NET是.NET框架内用于数据库访问的组件,而Entity Framework则是一种ORM(对象关系映射)工具,可以简化数据库操作,使得开发者能够使用面向对象的方式处理数据。 6. Web服务与WCF: ASP.NET支持创建Web服务,...

    hibernate-4.3.5(part1)

    Hibernate是一个流行的开源对象关系映射(ORM)框架,它允许Java开发者在处理数据库时使用面向对象的方式,极大地简化了数据库操作。在这个版本中,我们可能会发现一系列用于数据库交互的API、配置文件、示例代码和...

    XCP协议层标准ASAM_XCP_Part2-Protocol-Layer-Specification_V1-1-0

    7. 数据类型的映射:这部分描述了XCP中定义的数据类型和ASAM标准数据类型之间的映射关系。为了确保不同系统和设备间数据的一致性和可交换性,数据类型的映射是必要的。 8. 文档的版权和声明:文档指出其内容版权...

    hibernate3.3.2jar包part1

    Hibernate,作为一个流行的开源对象关系映射(ORM)框架,为Java开发者提供了一种简单而强大的方式来管理数据库操作。在Java应用中,Hibernate使得开发人员可以将业务逻辑与数据库操作解耦,从而更加专注于应用程序...

    Hibernate part 8:一对多关联关系映射

    在Java世界中,ORM(对象关系映射)框架如Hibernate极大地简化了数据库操作。本篇文章主要探讨的是Hibernate中的一对多关联关系映射,这是在实际项目开发中非常常见的一种关系映射类型。通过理解并掌握一对多关联,...

    hiberante4.2.3-part01

    Hibernate是Java领域中一款广泛应用的关系对象映射框架,它允许开发者使用面向对象的方式来操作数据库,大大简化了数据访问层的编码工作。这个压缩包“hibernate4.2.3-part01”很可能是Hibernate 4.2.3版本的一部分...

    Hiberante part 9:一对一关系映射

    Hibernate作为Java领域中最流行的ORM(对象关系映射)工具,它允许开发者以面向对象的方式处理数据库操作,简化了数据库与Java应用程序之间的交互。一对一关系映射是数据库设计中常见的一种关联类型,表示一个实体与...

    精通 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简介  ...

Global site tag (gtag.js) - Google Analytics