`

036_一对一单向外键关联_xml

 
阅读更多

星期日, 一月 10, 2016   16:22

在xml中这种单向的关联该怎么配置

 

调试了特么久,结果正确了。

 

代码案例:

使用student   stuidcard进行验证一对一的单向关联

 

1.先建一个student类

2.对应的xml文件进行配置

3.再建一个stuidcard类(里面包含一个student类的引用)

4.对应的xml文件进行配置

5.在hibernate.cfg.xml进行指明student类和stuidcard类的位置

6.进行写测试类

7.运行结果

 

 

 

 

具体的代码案例:

student类

package com.zhuhw.hibernate.model;

public class Student {
	private int id;
	private String name;
	public int getId() {
		return id;
	}
	public String getName() {
		return name;
	}
	public void setId(int id) {
		this.id = id;
	}
	public void setName(String name) {
		this.name = name;
	}
	
}

 

student.hbm.xml文件

/hibernate_0700_One2One_unic_fk/src/com/zhuhw/hibernate/model/Student.hbm.xml

 

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
        "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- 找不到entity,是因为这个类没改包名 -->
<hibernate-mapping package="com.zhuhw.hibernate.model">
	<class name="Student" table="student" >
		<id name="id" >
		 <generator class="native"></generator>
		</id>
		<property name="name" />
	</class>
</hibernate-mapping>

 

 

/hibernate_0700_One2One_unic_fk/src/com/zhuhw/hibernate/model/StuIdCard.java

 

package com.zhuhw.hibernate.model;

public class StuIdCard{
	private int id;
	private String name;
    private Student student;
	public int getId() {
		return id;
	}
	public String getName() {
		return name;
	}
	
	public void setId(int id) {
		this.id = id;
	}
	public void setName(String name) {
		this.name = name;
	}

	public void setStudent(Student student) {
		this.student = student;
	}
	public Student getStudent() {
		return student;
	}
	
}

 

 

 

/hibernate_0700_One2One_unic_fk/src/com/zhuhw/hibernate/model/StuIdCard.hbm.xml

 

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
        "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- 找不到entity,是因为这个类没改包名 -->
<hibernate-mapping package="com.zhuhw.hibernate.model">
	<class name="StuIdCard" table="StuIdCard" >
		<id name="id" >
		 <generator class="native"></generator>
		</id>
		<property name="name" />
		<many-to-one name="Student" column="studentId" unique="true"></many-to-one>
	</class>
</hibernate-mapping> 

这个一对一的关系的映射有一个需要注意的点,注意name的值
<!-- name指的是 StuIdCard中的student中的一个引用,与这个引用是一样的值-->
		<many-to-one name="student" column="studentId" unique="true"></many-to-one>

 

 

 

/hibernate_0700_One2One_unic_fk/src/hibernate.cfg.xml

 

<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
        "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
        "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">

<hibernate-configuration>

    <session-factory>

        <!-- Database connection settings -->
        <property name="connection.driver_class">com.mysql.jdbc.Driver</property>
        <property name="connection.url">jdbc:mysql://localhost/hibernate</property>
        <property name="connection.username">root</property>
        <property name="connection.password">root</property>

        
        <!--
        <property name="connection.driver_class">oracle.jdbc.driver.OracleDriver</property>
        <property name="connection.url">jdbc:oracle:thin:@localhost:1521:orcl</property>
        <property name="connection.username">scoot</property>
        <property name="connection.password">tiger</property>-->
        
        <!-- JDBC connection pool (use the built-in) -->
        <!--<property name="connection.pool_size">1</property>-->

        <!-- SQL dialect -->
        <property name="dialect">org.hibernate.dialect.MySQLDialect</property>

        <!-- Enable Hibernate's automatic session context management -->
        <property name="current_session_context_class">thread</property>

        <!-- Disable the second-level cache  -->
        <property name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property>

        <!-- Echo all executed SQL to stdout -->
        <property name="show_sql">true</property>
        <property name="format_sql">true</property>

        <!-- Drop and re-create the database schema on startup -->
        <property name="hbm2ddl.auto">create</property>
      	<!-- hibernate去哪里找这个配置文件 -->
        <mapping resource="com/zhuhw/hibernate/model/Student.hbm.xml"/>
        <mapping resource="com/zhuhw/hibernate/model/StuIdCard.hbm.xml"/><!--
        
	    <mapping class="com.zhuhw.hibernate.model.Husband"/>
		<mapping class="com.zhuhw.hibernate.model.Wife"/>	    
    --></session-factory>

</hibernate-configuration>

 

 

测试类

/hibernate_0700_One2One_unic_fk/test/com/zhuhw/hibernate/model/HibernateORMappingTest.java

 

package com.zhuhw.hibernate.model;

import java.util.Date;

import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.AnnotationConfiguration;
import org.hibernate.tool.hbm2ddl.SchemaExport;
import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.Test;

public class HibernateORMappingTest {
	
	public static SessionFactory sf = null;
	@BeforeClass
	public  static void beforeClass(){
			sf = new AnnotationConfiguration().configure().buildSessionFactory();
	}
	
	@Test
	public void testOne2One(){
		new SchemaExport(new AnnotationConfiguration().configure()).create(false, true);
	}
	@AfterClass
	public static void afterClass(){
		sf.close();
	}
	
	
	
}

 

 

运行结果:

     console结果:

 

  

create table StuIdCard (
        id integer not null auto_increment,
        name varchar(255),
        studentId integer unique,
        primary key (id)
    )
16:19:55,274 DEBUG SchemaExport:377 - 
    create table student (
        id integer not null auto_increment,
        name varchar(255),
        primary key (id)
    )
16:19:55,352 DEBUG SchemaExport:377 - 
    alter table StuIdCard 
        add index FKD3A449FF7576FD0B (studentId), 
        add constraint FKD3A449FF7576FD0B 
        foreign key (studentId) 
        references student (id)

 

 

此例子完成

0
0
分享到:
评论

相关推荐

    Hibernate教程04_关系映射之一对一单向外键关联

    **标题详解:**“Hibernate教程04_关系映射之一对一单向外键关联” 在Hibernate框架中,关系映射是数据库表之间的关联在对象模型中的体现。本教程重点讲解了一对一(One-to-One)单向外键关联的实现方法。在数据库...

    Hibernate一对一单向外键关联(annotation/xml)

    本篇将深入探讨Hibernate中的一对一单向外键关联,通过注解和XML配置两种方式进行实现。这种关联允许一个实体类与另一个实体类之间存在一对一的关系,并且只在其中一个实体类中维护这种关系。 首先,我们来理解一对...

    Hibernate关联映射-one to one单向外键关联

    以上就是关于Hibernate中一对一单向外键关联的基本介绍。通过理解和熟练掌握这种关联方式,开发者可以更高效地设计和管理数据库模型,提升应用性能。在实际项目中,还需结合业务场景灵活运用,并注意性能优化。通过...

    Hibernate 一对一外键单向关联

    首先,一对一外键关联指的是一个实体通过外键直接引用另一个实体的主键。在单向关联中,只有其中一个实体知道另一个实体的存在,而另一个实体则无感知。这种关联通常体现在数据库设计中,比如一个用户只有一个账户,...

    Hibernate一对一唯一外键关联映射(单向关联)

    在Java的持久化框架Hibernate中,一对一(One-to-One)关联映射是常见的...以上就是关于Hibernate一对一唯一外键关联映射(单向关联)的详细说明。通过这种方式,我们可以轻松地在Java应用中处理数据库的一对一关系。

    hibernate一对一之唯一外键关联(双向关联)

    本篇主要探讨的是Hibernate中的一对一(OneToOne)关系映射,特别是唯一外键关联(UniDirectional and Bidirectional Association)的情况。我们将深入理解这种关联方式的配置、实现以及它在实际应用中的价值。 1. ...

    Hibernate 一对多外键单向关联

    在Java持久化框架Hibernate中,一对多外键单向关联是一种常见的关系映射方式,它描述了一对多的关系,其中一个实体(例如Person)可以与多个其他实体(例如Address)相关联,而关联的方向只从多方(Address)指向...

    hibernate one-to-one 一对一唯一外键关联映射_单向 and 双向

    Hibernate 一对一唯一外键关联映射详解 Hibernate是一种流行的Java持久层框架,提供了多种关联映射方式,其中一对一唯一外键关联映射是一种常见的关联方式。在本文中,我们将详细介绍Hibernate一对一唯一外键关联...

    hibernate一对一之唯一外键关联(单向关联)

    总的来说,Hibernate的一对一唯一外键关联(单向关联)是通过在一方实体中定义另一方实体的引用,并通过注解或XML映射文件进行配置来实现的。这种关联方式简化了对象关系的管理,但同时也需要开发者在操作关联对象时...

    hibernate一对一唯一外键关联映射(单项关联)

    在Java的持久化框架Hibernate中,一对一(One-to-One)关联映射是常见的关系映射方式之一,尤其在处理数据库中的唯一外键关联时。这种映射方式允许在一个实体类中引用另一个实体类的唯一实例,形成一对一的关系。在...

    Hibernate基于外键的一对多单向关联

    “Hibernate基于外键的一对多单向关联”这个标题指的是在Java持久化框架Hibernate中,如何通过外键实现一个实体类(如订单)与另一个实体类(如商品)之间的一对多关系,并且这种关联是单向的,即从订单端可以访问到...

    Hibernate教程06_关系映射之一对一单向主键关联

    5. **源码实践:** 学习者可以通过下载提供的源码,查看实体类的定义、映射文件(如.hbm.xml或使用注解的方式)以及相关的DAO和Service层代码,了解如何在实际项目中设置和使用一对一单向主键关联。 6. **例子分析...

    hibernate主键实现一对一单向关联关系源码

    - 一对一关联通常需要在数据库层面建立唯一约束,以确保两个表的主键/外键关联是唯一的。 - 当使用`cascade`属性时,需谨慎处理级联操作,避免不必要的数据删除或更新。 - 如果不希望在`Person`类中暴露`Address`...

    hibernate多对一单向关联关系实现源码

    以上就是关于Hibernate中实现多对一单向关联关系的基本知识,包括如何在实体类中定义关联、如何进行数据库操作以及如何查询关联对象。这个源代码示例应该提供了更具体的实现细节,你可以通过查看和运行它来深入理解...

    Hibernate双向一对一关联映射(注解版)

    在Hibernate中,一对一关联映射分为单向和双向。单向一对一映射通常涉及一个实体持有另一个实体的引用,而双向一对一映射则意味着两个实体都可以互相引用。这种关联关系在数据库层面通常通过主键外键约束来实现,但...

    详解Hibernate一对一映射配置

    在Java持久化框架Hibernate中,一对一(One-to-One)映射是对象关系映射的一种常见方式,用于表示两个实体之间一对一的关系。这种关系通常出现在一个实体的实例只能与另一个实体的单个实例相关联的情况。下面我们将...

    Hibernate双向一对一关联映射(XML版)

    在这个“Hibernate双向一对一关联映射(XML版)”的主题中,我们将深入探讨如何通过XML配置文件实现两个实体之间的一对一关系。 首先,我们需要理解一对一关联的概念。在数据库中,一对一关联意味着两个表中的每一...

    Hibernate教程10_关系映射之多对一单向关联

    本教程主要聚焦于Hibernate中的一个关键概念——关系映射,特别是多对一单向关联的实现。这种关联类型常出现在数据库设计中,比如一个部门可以有多名员工,但一个员工只属于一个部门。 首先,我们要理解多对一关系...

    Hibernate单向一对多关联映射(XML版)

    1. **配置实体类**:首先,我们需要创建两个实体类,代表一对一关系的双方。比如,`User`和`Order`。在`User`类中,我们不需要定义`Order`的集合,因为这是单向的一对多关联。而在`Order`类中,我们可以定义一个`...

Global site tag (gtag.js) - Google Analytics