------------------------------------------------------------------------------------------
快速搭建 HIBERNATE,以便测试
------------------------------------------------------------------------------------------
person - address
public class Person implements java.io.Serializable {
// Fields
private Long id;
private String name;
private Long age;
private Long addressId;
private Address address ;
------省略get/set方法
public class Address implements java.io.Serializable {
// Fields
private Long id;
private String detail;
------省略get/set方法
hibernate 配置 person
建表语句
CREATE TABLE "SYSTEM"."PERSON"
(
"ID" NUMBER(16,0) NOT NULL ENABLE,
"NAME" VARCHAR2(20),
"AGE" NUMBER(4,0),
"ADDRESS_ID" NUMBER(16,0) NOT NULL ENABLE,
PRIMARY KEY ("ID")
--------------------------
CREATE TABLE "SYSTEM"."ADDRESS"
( "ID" NUMBER(16,0) NOT NULL ENABLE,
"DETAIL" VARCHAR2(200),
PRIMARY KEY ("ID")
-----------------------
<hibernate-mapping>
<class name="com.po.Person" table="PERSON">
<id name="id" type="java.lang.Long">
<column name="ID" precision="16" scale="0" />
<generator class="sequence" />
</id>
<property name="name" type="java.lang.String">
<column name="NAME" length="20" />
</property>
<property name="age" type="java.lang.Long">
<column name="AGE" precision="4" scale="0" />
</property>
<property name="addressId" type="java.lang.Long">
<column name="ADDRESS_ID" precision="16" scale="0" not-null="true" />
</property>
<many-to-one name="address" column="id" unique="true"></many-to-one>
<!-- <one-to-one name="address"></one-to-one> 这么写也可以-->
</class>
</hibernate-mapping>
--------------------------------
hibernate 配置 address
<hibernate-mapping>
<class name="com.po.Address" table="ADDRESS">
<id name="id" type="java.lang.Long">
<column name="ID" precision="16" scale="0" />
<generator class="sequence" />
</id>
<property name="detail" type="java.lang.String">
<column name="DETAIL" length="200" />
</property>
</class>
</hibernate-mapping>
测试
----------------------------------
/**
* Test.java
* com.hib
*
* Function: TODO
*
* ver date author
* ──────────────────────────────────
* Mar 31, 2010 程仁银
*
* Copyright (c) 2010, All Rights Reserved.
*/
package com.hib;
import java.util.List;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import com.po.Address;
import com.po.Person;
import com.po.TbUsers;
/**
* ClassName:Test
* Project:
* Company: LINKAGE
*
* @author 程仁银
* @version
* @since Ver 1.1
* @Date Mar 31, 2010 1:56:43 PM
*
* @see
*/
public class Test {
/**@author . 程仁银
* @email . 13813375172@139.com
* @createTime .Mar 31, 2010 1:56:44 PM
* @parameters .
* @description .
*/
public static void main(String[] args)
{
SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory();
Session session = sessionFactory.openSession();
Transaction tx = session.beginTransaction();
// 业务逻辑测试
Query query=session.createQuery("from Person u");
List<Person> list = query.list();
for(Person person:list)
{
System.out.println("----------"+person.getName()+" "+person.getAddress().getId()+" "+person.getAddress().getDetail());
}
System.out.println("==");
/*Query query=session.createQuery("from Address u");
List<Address> list = query.list();
for(Address p:list)
{
System.out.println(p.getId()+" "+p.getDetail());
}
System.out.println("==");*/
tx.commit();
}
}
双向关联 配置 简概如下:
public class Person implements java.io.Serializable {
// Fields
private Long id;
private String name;
private Long age;
private Long addressId;
private Address address ;
<many-to-one name="address" column="id" unique="true"></many-to-one>
----------------------------------------------------
private Long id;
private String detail;
private Person person;
<many-to-one name="person" column="id" unique="true" fetch="select"></many-to-one>
测试:
Query query=session.createQuery("from Address u");
List<Address> list = query.list();
for(Address p:list)
{
System.out.println(p.getId()+" "+p.getDetail()+" - "+p.getPerson().getName());
}
分享到:
相关推荐
本主题聚焦于“Hibernate双向一对一关联映射”的注解实现,这是一种高级的数据库设计模式,用于处理两个实体之间一对一的关系。 在Hibernate中,一对一关联映射分为单向和双向。单向一对一映射通常涉及一个实体持有...
在一对一关联中,如果两个实体类共享同一个主键,我们可以在其中一个实体类中定义另一个实体类的属性,这样就形成了一个单向关联。例如,假设我们有两个实体类:`Person` 和 `Address`,一个人只有一个地址,而一个...
总结来说,Hibernate中的一对一主键关联映射允许两个实体共享同一个主键,实现单向关联时只需在依赖方添加对另一方的引用。在实际应用中,应根据业务需求谨慎选择关联类型,以确保数据的完整性和一致性。
- 虽然一对一关联提供了便利,但过多的一对一关联可能会影响性能,因为每次查询可能涉及多个表,增加数据库访问的复杂性。因此,应谨慎设计实体间的关系。 8. **实例应用** - 在实际项目中,一对一关联常用于用户...
本资源主要探讨的是“hibernate一对一关联关系”。 一对一关联关系在现实世界中很常见,比如一个人只有一个身份证,或者一个公司的总部只有一个。在Hibernate中,设置一对一关联关系可以帮助我们更好地管理和操作...
1. **关联类型:** Hibernate支持四种基本的关联类型,包括一对一(OneToOne)、一对多(OneToMany)、多对一(ManyToOne)和多对多(ManyToMany)。本主题将主要聚焦在一对一和一对多关联。 2. **关联的方向性:**...
本文主要探讨的是Hibernate中的两种关联关系:多对一单向关联和多对一双向关联。通过理解这两种关联方式,我们可以更好地设计和实现复杂的数据库模型。 首先,我们来看**多对一单向关联**。这种关联意味着一个实体...
在一对一关联中,外键通常放在关系的“从”方,即依赖于另一方的实体。唯一外键关联映射时,外键字段在数据库中设置为主键约束,确保每个值都是唯一的,这样就能保证一对一的关系。 ### 2. 创建实体类 假设我们有...
Hibernate 一对一唯一外键关联映射详解 Hibernate是一种流行的Java持久层框架,提供了多种关联映射方式,其中一对一唯一外键关联映射是一种常见的关联方式。在本文中,我们将详细介绍Hibernate一对一唯一外键关联...
- 在双向一对一双向关联中,需要注意维护双方的引用,以保持数据的一致性。 - 事务管理时,可能需要使用`CascadeType`来决定是否自动处理关联对象的保存、更新和删除操作。 - 删除一个实体时,必须确保不会违反...
包含《多对多双向关联映射》《多对一单向关联映射》《多对一双向关联映射》《一对多单向关联映射》等文档,并有图解及例子,非常适合新手学习,尤其是刚刚接触hibernate,对映射关系不清楚的。。。。
1. **外键约束**:在一对一关联中,通常由一方持有外键,可以是双向关联,也可以是单向关联。 2. **唯一性**:在数据库中,一对一关联的两个表的关联字段必须具有唯一性约束。 3. **性能考虑**:根据业务需求选择...
在这个“Hibernate双向一对一关联映射(XML版)”的主题中,我们将深入探讨如何通过XML配置文件实现两个实体之间的一对一关系。 首先,我们需要理解一对一关联的概念。在数据库中,一对一关联意味着两个表中的每一...
若双方都知道对方,称为双向一对一关联。 4. **配置XML映射文件**:如果不使用注解,可以在.hbm.xml文件中定义映射,使用标签来配置一对一关系。 5. **持久化操作**:使用SessionFactory创建Session,通过Session...
唯一外键是指在一对一关联中,一方的主键同时也作为另一方的外键,确保两个实体共享同一个ID。这可以通过在没有`@JoinColumn`的情况下让两个实体共享相同的主键生成策略来实现。例如,使用`GenerationType.IDENTITY`...
本主题聚焦于"hibernate单向多对多映射",特别是在XML配置文件中的实现。在这个过程中,我们将探讨多对多关系的原理,以及如何在Hibernate中通过XML配置文件来定义这种关系。 首先,我们需要理解多对多关系的概念。...
虽然一对一关联提供了便利,但过度使用可能会增加数据库查询复杂性,影响性能。因此,合理设计数据模型和关联关系,结合缓存策略,才能实现高性能的持久化操作。 总结来说,Hibernate的一对一主键关联映射,尤其是...
首先,一对一关联可以分为两种类型:单向和双向。在单向一对一关联中,只有一个实体知道另一个实体的存在,而另一个实体并不知情。这里我们讨论的是单向外键关联,即一方实体持有了另一方的外键。 在Hibernate中,...