zoukankan      html  css  js  c++  java
  • hibernate--多对一单向关联 (重点!!!)

    一个用户组包含多个用户, 每个用户属于一个组.

    一个人可以有多个车, 每个车属于一个人.

    一个人有很多梦想, 一个特定的梦想属于一个人.

    错误做法:

    person里 有 personid, personname, dreamid

    dream里有id, dreamdescr

    会出现冗余, 因为是一对多

    personid  personname   dreamid

    1           zhangsan       1

    1           zhangsan       2

    dreamid    dreamdescr

    1       earn money

    2              eat a lot

    下面做人和组的关系,  一个group有很多user, 一个user只属于一个group, 所以group是 一   user是多

    group.java:

    package com.bjsxt.hibernate;
    
    import javax.persistence.Entity;
    import javax.persistence.GeneratedValue;
    import javax.persistence.Id;
    import javax.persistence.Table;
    
    @Entity
    @Table(name="t_group")
    public class Group {
    	private int id;
    	private String name;
    	@Id
    	@GeneratedValue
    	public int getId() {
    		return id;
    	}
    	public void setId(int id) {
    		this.id = id;
    	}
    	public String getName() {
    		return name;
    	}
    	public void setName(String name) {
    		this.name = name;
    	}
    }
    

    user.java:

    里面创建一个group对象, 是多对一的单项

    package com.bjsxt.hibernate;
    
    import javax.persistence.Entity;
    import javax.persistence.GeneratedValue;
    import javax.persistence.Id;
    import javax.persistence.ManyToOne;
    import javax.persistence.Table;
    
    @Entity
    @Table(name="t_user")
    public class User {
    	private int id;
    	private String name;
    	private Group group;  
    	@ManyToOne
    	
    	public Group getGroup() {
    		return group;
    	}
    	public void setGroup(Group group) {
    		this.group = group;
    	}
    	@Id
    	@GeneratedValue
    	public int getId() {
    		return id;
    	}
    	public void setId(int id) {
    		this.id = id;
    	}
    	public String getName() {
    		return name;
    	}
    	public void setName(String name) {
    		this.name = name;
    	}
    }
    

    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>
    
             
            <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">linda0213</property>
            <property name="dialect">org.hibernate.dialect.MySQLDialect</property>
           <!--
            <property name="connection.driver_class">oracle.jdbc.driver.OracleDriver</property>
            <property name="connection.url">jdbc:oracle:thin:@localhost:1521:SXT</property>
            <property name="connection.username">scott</property>
            <property name="connection.password">tiger</property>
          	<property name="dialect">org.hibernate.dialect.OracleDialect</property>
           -->
    
            <!-- JDBC connection pool (use the built-in) -->
            <property name="connection.pool_size">1</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">update</property>
    		 -->
          
            <mapping class="com.bjsxt.hibernate.Group"/>
    		<mapping class="com.bjsxt.hibernate.User"/>
    		
    		   <!--  
    		 <mapping resource="com/bjsxt/hibernate/Group.hbm.xml"/>
    		 <mapping resource="com/bjsxt/hibernate/User.hbm.xml"/>-->
    		
        </session-factory>
    
    </hibernate-configuration>
    

    XML方式:

    group是一, 不需要改什么:

    <?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>
    	<class name="com.bjsxt.hibernate.Group" table="t_group">
    		<id name="id">
    			<generator class="native"></generator>
    		</id>		
    		<property name="name"></property>		
        </class>	
    </hibernate-mapping>
    

      

    user是多, 需要设置:

    <?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>
    	<class name="com.bjsxt.hibernate.User" table="t_user">
    		<id name="id">
    			<generator class="native"></generator>
    		</id>		
    		<property name="name"></property>
    		<many-to-one name="group" column="groupId" />
        </class>	
    </hibernate-mapping>
    

      

     test文件:

    package com.bjsxt.hibernate;
    
    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 {
    	private static SessionFactory sessionFactory;
    	
    	//@BeforeClass
    	public static void beforeClass() {
    			sessionFactory = new AnnotationConfiguration().configure().buildSessionFactory();
    	}
    	//@AfterClass
    	public static void afterClass() {
    		sessionFactory.close();
    	}
    	
    	@Test
    	public void testSchemaExport() {
    		new SchemaExport(new AnnotationConfiguration().configure()).create(false, true);
    	}	
    	public static void main(String[] args) {
    		beforeClass();
    	}
    }
    

      

      

  • 相关阅读:
    day74 作业
    day73 基表 表关联
    不知道第几次分享了
    day72 序列化家族
    day72 作业
    vscode
    vuex
    linux python3.7的安装和配置
    使用多线程分批发送短信代码,分割list
    docker 容器里使用crontab不生效
  • 原文地址:https://www.cnblogs.com/wujixing/p/5421054.html
Copyright © 2011-2022 走看看