`

将一个对象(组件)作为属性,但是不想建立这个表

阅读更多
如果对象的某个属性为一个对象,而且不想单独对该对象建立一个表,这时Hibernate是这样处理的:

public class Name {

	
	private String firstName;
	private String SecondName;
	public String getFirstName() {
		return firstName;
	}
	public void setFirstName(String firstName) {
		this.firstName = firstName;
	}
	public String getSecondName() {
		return SecondName;
	}
	public void setSecondName(String secondName) {
		SecondName = secondName;
	}
	
	
}



public class Employee {
	
	private Integer id;
	private Name name;
	private Integer age;
	
	public Integer getId() {
		return id;
	}
	public void setId(Integer id) {
		this.id = id;
	}
	public Name getName() {
		return name;
	}
	public void setName(Name name) {
		this.name = name;
	}
	public Integer getAge() {
		return age;
	}
	public void setAge(Integer age) {
		this.age = age;
	}
}



注意映射文件:

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC 
	"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
	"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="cn.itcast.hibernate.domain">

	<class name="Employee" table="employee">
		<id name="id" unsaved-value="-1">
			<generator class="native" />
		</id>
		<property name="age" />
		<component name="name">
			<property name="firstName" column="first_name"/>
			<property name="SecondName" column="second_name"/>
		</component>
	</class>
</hibernate-mapping>




测试代码:
import org.hibernate.Session;
import org.hibernate.Transaction;

import cn.itcast.hibernate.HibernateUtil;
import cn.itcast.hibernate.domain.Employee;
import cn.itcast.hibernate.domain.Name;

public class ComponentTest {

	public static void main(String[] args) {
		Session session = HibernateUtil.getSession();
		Transaction tx = session.beginTransaction();
		
		Name name = new Name();
		name.setFirstName("firstname");
		name.setSecondName("secondname");
		
		Employee employee = new Employee();
		employee.setAge(30);
		employee.setName(name);
		
		session.save(employee);
		
		tx.commit();
		session.close();
	}

}



关键是映射文件中采用的标签component.

最终在数据库中生成的表的结构:

id  int
age int
firstname varchar
secondname varchar

即所有字段都出现在同一个表中
分享到:
评论

相关推荐

    一个远程调用对象的例子(VB)

    2. **通道创建**:为了使客户端能够与远程对象通信,需要建立一个通道。在VB.NET中,可以使用`System.Runtime.Remoting.Channels`命名空间下的类来创建通道,如`TcpChannel`或`HttpChannel`,它们分别基于TCP和HTTP...

    超级有影响力霸气的Java面试题大全文档

     SessionBean: Stateless Session Bean 的生命周期是由容器决定的,当客户机发出请求要建立一个Bean的实例时,EJB容器不一定要创建一个新的Bean的实例供客户机调用,而是随便找一个现有的实例提供给客户机。...

    面向对象的程序设计心得.pdf

    封装(Encapsulation)是面向对象程序设计的一个原则,它指的是将数据(属性)和行为(方法)捆绑在一起,形成一个独立的单元,并通过对外提供的接口与外界进行交互。封装的目的是隐藏对象的内部状态,只能通过指定...

    基于组件的GIS开发——Visual Basic 和 Map Objects实现

    ### 基于组件的GIS开发:Visual Basic与Map Objects实现 #### 一、Map Objects 概览 ...对于那些希望利用现有GIS支撑软件的强大功能而又不想受限于其环境的开发者来说,MO无疑是一个非常理想的选择。

    易语言SQLDMO.SQLServer对象操作数据库源码

    SQLDMO是SQL Server的一个组件,它允许开发者通过编程方式访问和管理SQL Server的各种对象,如服务器、数据库、表、视图等。它包含了一系列的对象和方法,可以用来创建、修改和删除数据库对象,执行查询,以及进行...

    Delphi程序设计试题.pdf

    * 在程序运行期间,一个 Table 对象只能固定和一个关系表相连。× * 要想在数据集中增加计算字段,必须先将数据集的字段全部置为动态字段。× * 在设计阶段,如果在 Query 对象的 SQL 语句中设置了参数,则必须在 ...

    Delphi程序设计复习资料.docx

    在Delphi中,建立一个文本编辑区域,可采用Edit控件。Delphi应用程序必有一个项目文件和至少一个单元文件。Delphi应用程序设计基于Object Pascal语言。 在Delphi中,表达式A .67C .6960 + 19 div 2 的值是79。最...

    第5章ADO.NET的数据库操作对象

    对于复杂型数据绑定,可以将多个数据元素绑定到一个控件,例如GridView。GridView控件允许你展示表格形式的数据,并且可以直接进行编辑、排序和分页。以下是一个简单的GridView绑定示例: ```csharp GridView1....

    java 面试题 总结

    面向对象计算始于这个基本概念,即现实世界可以被描绘成一系列完全自治、封装的对象,这些对象通过一个受保护的接口访问其他对象。 4. 多态性: 多态性是指允许不同类的对象对同一消息作出响应。多态性包括参数化多...

    Delphi程序设计试题及解答wan.docx

    7. 现建立一个简单报表,仅包含数据列标题栏、数据栏和汇总栏,则在Bands属性的子属2性中,不需要选择的是()。 知识点:Quick Report是一种常用的报表组件, Delphi程序设计中可以使用Quick Report来生成报表。 ...

    cpp-Realm移动数据库SDKs的核心数据库组件

    每个模型类对应数据库中的一个表,类的属性则映射为表的列。 2. **同步性**: Realm的核心优势之一就是其实时同步能力。通过 Realm Sync,开发者可以在多个设备之间无缝同步数据,确保所有更改即时反映到所有连接的...

    SA-FileUp 文件上传

    来自Software Artisans,SA-FileUP组件是一个真正的ActiveX DLL服务器组件,容易集成到ASP网页中。该组件也可在MTS/COM+的环境中上运行。 使用SA-FileUP组件的教程可在http://www.activeserverpages.com/upload/ 上...

    java设计模式解释

    解释器模式是一种行为型设计模式,它定义一个新的语言的文法,并且建立一个解释器来解释该语言中的句子。这里的“语言”是指使用规定格式和语法的代码。 **应用场景:** 当一个语言需要解释执行,且这个语言的文法...

    2021-2022计算机二级等级考试试题及答案No.12565.docx

    1. 外部关键字(D):在数据库中,如果一个表的字段是另一个表的主键或候选键,那么这个字段被称为外部关键字,它用于建立两个表之间的关联。 2. 链表操作(D):在链表中删除一个节点,应该将前一个节点的next指针...

    设计模式精解-GoF23种设计模式解析附C++实现源码

    5. **Memento模式**:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可以将该对象恢复到原先保存的状态。 - **应用场景**:需要保存/恢复数据的相关状态而又不希望暴露...

    2014SOL机考题

    - **选项B**:正确,Integration Services (SSIS) 是 SQL Server 的一个组件,专门用于数据集成和批量数据加载任务,可以帮助 Steve 将来自不同源的数据转换为统一的格式,并加载到数据库中。 - **选项C**:不正确,...

    基于StrangeIoC的点击方块加分的Demo

    StrangeIoC是一个专门为Unity游戏引擎设计的依赖注入框架,它基于IoC(Inversion of Control)原则,使得游戏代码更加模块化,易于测试和维护。在这个"基于StrangeIoC的点击方块加分的Demo"中,我们将探讨如何利用...

    jpivot学习总结.doc

    primaryKeyTable 如果成员表不只一个,而是多个表通过 join 关系形成的,那么就要通过这个属性来指明 join 的这些表中,哪一个与 Dimension 里设置的 foreignKey 属性形成外键关系。通过该属性来指明主表 caption ...

    图表控件MsChart教程

    安装好后,建立一个.NET 3.5的Web项目,像使用普通控件一样拖放到要使用的Web界面即可。初步研究了一下,整个图形控件主要由以下几个部份组成: 1. Annotations -- 图形注解集合 2. ChartAreas -- 图表区域集合 3. ...

    Java的23种设计模式(疯狂Java总结)

    - 必须保存/恢复数据,但又不想暴露对象的内部状态。 - 如果用公有属性来保存数据,会使程序的其他部分过于紧密地与它耦合。 - **参与者**: - `Originator`:创建一个备忘录,用以记录当前的内部状态。 - `...

Global site tag (gtag.js) - Google Analytics