zoukankan      html  css  js  c++  java
  • hibernate--ID生成策略--annotation

    annotation: @GeneratedValue

    a) 自定义ID

    b)auto: 对mysql默认使用auto_increment, 对oracle使用hibernate_sequence

    c)identity 如何使用?  @GeneratedValue(strategy=GenerationType.IDENTITY)  oracle不可用, mysql,sql server可以用

    d)sequence: 如何使用?  @GeneratedValue(strategy=GenerationType.SEQUENCE)   只能oracle使用, 需要调整hibernate.cfg.hml里配置

    e) table: @TableGenerator

    1. 新建java项目,  引入hibernate, junit(user library)和sql包

    2. 新建包 com.bjsxt.hibernate, class: Teacher.java:

    注意这两项 

    @Id

    @GeneratedValue

    package com.bjsxt.hibernate;
    
    import javax.persistence.Entity;
    import javax.persistence.GeneratedValue;
    import javax.persistence.Id;
    import javax.persistence.Table;
    
    
    @Entity
    @Table(name="_Teacher")
    public class Teacher {
    	private int id;
    	private String name;
    	private String title;
    	
    	@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;
    	}
    	public String getTitle() {
    		return title;
    	}
    	public void setTitle(String title) {
    		this.title = title;
    	}
    }
    

      

    3. 配置hibernate.cfg.xml放在src下.    update重要, 否则不用新生成id

    <?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> -->
    
            <!-- 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> -->
            <property name="hbm2ddl.auto">update</property> 
    		 
    		<!--<mapping class="com.bjsxt.hibernate.model.Student"/> -->
    		<!--<mapping resource ="com/bjsxt/hibernate/model/Student.hbm.xml"/> -->
      		<mapping class="com.bjsxt.hibernate.Teacher"/> 
    		
        </session-factory>
    
    </hibernate-configuration>
    

    4. 创建log4j.properties在src下: 

    ### direct log messages to stdout ###
    log4j.appender.stdout=org.apache.log4j.ConsoleAppender
    log4j.appender.stdout.Target=System.out
    log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
    log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n
    
    ### direct messages to file hibernate.log ###
    #log4j.appender.file=org.apache.log4j.FileAppender
    #log4j.appender.file.File=hibernate.log
    #log4j.appender.file.layout=org.apache.log4j.PatternLayout
    #log4j.appender.file.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n
    
    ### set log levels - for more verbose logging change 'info' to 'debug' ###
    
    log4j.rootLogger=warn, stdout
    
    #log4j.logger.org.hibernate=info
    #log4j.logger.org.hibernate=debug
    
    ### log HQL query parser activity
    #log4j.logger.org.hibernate.hql.ast.AST=debug
    
    ### log just the SQL
    #log4j.logger.org.hibernate.SQL=debug
    
    ### log JDBC bind parameters ###
    #log4j.logger.org.hibernate.type=info
    #log4j.logger.org.hibernate.type=debug
    
    ### log schema export/update ###
    log4j.logger.org.hibernate.tool.hbm2ddl=debug
    
    ### log HQL parse trees
    #log4j.logger.org.hibernate.hql=debug
    
    ### log cache activity ###
    #log4j.logger.org.hibernate.cache=debug
    
    ### log transaction activity
    #log4j.logger.org.hibernate.transaction=debug
    
    ### log JDBC resource acquisition
    #log4j.logger.org.hibernate.jdbc=debug
    
    ### enable the following line if you want to track down connection ###
    ### leakages when using DriverManagerConnectionProvider ###
    #log4j.logger.org.hibernate.connection.DriverManagerConnectionProvider=trace
    

    5. 项目右键新建source folder---"test"

    6. 项目下新建package和model里的package同名;

    7. 新建junit test文件:

    package com.bjsxt.hibernate;
    
    
    import org.hibernate.Session;
    import org.hibernate.SessionFactory;
    import org.hibernate.cfg.AnnotationConfiguration;
    import org.junit.AfterClass;
    import org.junit.BeforeClass;
    import org.junit.Test;
    
    public class HibernateIDTest {
    	private static SessionFactory sf=null;
    	@BeforeClass
    	public static void beforeClass(){
    		sf=new AnnotationConfiguration().configure().buildSessionFactory();
    	}
    	@Test
    	public void testTeacherSave() {
    		Teacher t =new Teacher();
    		t.setName("wdf");
    		t.setTitle("higfdfsdfsadh");
    		
    		
    		Session session =  sf.openSession();
    		session.beginTransaction();
    		session.save(t);
    		session.getTransaction().commit();
    		session.close();	
    	}
    	
    	@AfterClass
    	public static void afterClass(){
    		sf.close();
    	}
    }
    

      

    8. run as->junit test, 就会自动递增id, 生成新纪录 

  • 相关阅读:
    WCF 第四章 绑定 在多个绑定上暴露一个服务契约
    WCF 第五章 行为 事务跨操作事务流
    WCF 第五章 导出并发布元数据(服务行为)
    WCF 第五章 行为 通过配置文件暴露一个服务行为
    WCF 第五章 不支持会话的绑定的默认并发和实例
    WCF 第五章 并发和实例(服务行为)
    WCF 第五章 行为 总结
    WCF 第四章 绑定 绑定元素
    WCF 第五章 行为 事务之选择一个事务协议OleTx 或者WSAT
    WCF 第四章 绑定 比较各种绑定的性能和可扩展性
  • 原文地址:https://www.cnblogs.com/wujixing/p/5413004.html
Copyright © 2011-2022 走看看