关闭

hibernate中设置字段不持久化 注解

6699人阅读 评论(0) 收藏 举报
分类:

hibernate中Modle中的有些属性不想创建表是在数据库中产生字段保存数据,当这种需求是我们可以设置@transient表示透明的当设置此属性是在创建数据库是可以对此属性忽略,在本例中模拟了一个班级表表名为MyClass 属性有数据库id 班级名称 班级老师 老师身份证号 我们的需求想把老师身份证号不保存到数据库里不想对身份证不持久化数据解决方法很简单就是在对应的字段上面加@Transient的注解就搞定。

实例代码如下:

第一步:创建Java工程编写三个项目包把hibernate用的jar包添加到path里然后创建Modle类代码如下

package com.ygc.hibernate.modle;  
  
import java.io.Serializable;  
  
import javax.persistence.Basic;  
import javax.persistence.Entity;  
import javax.persistence.GeneratedValue;  
import javax.persistence.GenerationType;  
import javax.persistence.Id;  
import javax.persistence.Table;  
import javax.persistence.Transient;  
@Entity  
@Table(name="Class")  //设置数据库表名为class  
public class MyClass implements Serializable {  
    private int id;  
    private String className;  
    private String teacher;  
    private String teacherNumber;  
      
    @Id  
    @GeneratedValue(strategy=GenerationType.AUTO)  //设置主键自动增长  
    public int getId() {  
        return id;  
    }  
    public void setId(int id) {  
        this.id = id;  
    }  
      
    @Basic  
    public String getClassName() {  
        return className;  
    }  
    public void setClassName(String className) {  
        this.className = className;  
    }  
    public String getTeacher() {  
        return teacher;  
    }  
    public void setTeacher(String teacher) {  
        this.teacher = teacher;  
    }  
    //这是此注解后该属性不会数据持久化也是本例要说明的注解  
    @Transient  
    public String getTeacherNumber() {  
        return teacherNumber;  
    }  
    public void setTeacherNumber(String teacherNumber) {  
        this.teacherNumber = teacherNumber;  
    }  
}  

第二步:编写测试类就是Main方法的。

package com.ygc.hibernate.main;  
import org.hibernate.Session;  
  
import com.ygc.hibernate.modle.MyClass;  
import com.ygc.hibernate.utils.HibernateUtils;  
public class ClassTest {  
  
    /** 
     * @param args 
     */  
    public static void main(String[] args) {  
        MyClass clas1 = new MyClass();  
        clas1.setClassName("大学二年级");  
        clas1.setTeacher("田红菊");  
        clas1.setTeacherNumber("0100");  
          
        Session session = HibernateUtils.getFactory().openSession();  
        session.beginTransaction();  
        session.save(clas1);  
        session.getTransaction().commit();  
        session.close();  
        HibernateUtils.getFactory().close();  
    }  
}  

第三步:创建工具类就是把SessionFactory的方法单独写成工具类

package com.ygc.hibernate.utils;  
  
import org.hibernate.SessionFactory;  
import org.hibernate.cfg.AnnotationConfiguration;  
import org.hibernate.cfg.Configuration;  
  
public class HibernateUtils {  
    private HibernateUtils(){}  
    private static HibernateUtils hibernateUtils;  
    private HibernateUtils getHibernateUtils(){  
        if(hibernateUtils==null){  
            hibernateUtils = new HibernateUtils();  
        }  
        return hibernateUtils;  
    }  
      
    public static SessionFactory getFactory(){  
        Configuration configuration = new AnnotationConfiguration().configure();  
        return configuration.buildSessionFactory();  
    }  
} 

第四步:修改hibernate.cfg.xml的配置文件

<?xml version='1.0' encoding='utf-8'?>  
<!DOCTYPE hibernate-configuration PUBLIC  
        "-//Hibernate/Hibernate Configuration DTD 3.0//EN"  
        "http://www.hibernate.org/dtd/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>  
  
        <!-- 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.internal.NoCacheProvider</property>-->  
  
        <!-- Echo all executed SQL to stdout -->  
        <property name="show_sql">true</property>  
        <!--自动创建表-->  
       <property name="hbm2ddl.auto">create</property>  
  
        <!-- Drop and re-create the database schema on startup -->  
        <!--<property name="hbm2ddl.auto">update</property>-->  
  
        <!--<mapping resource="com/ygc/hibernate/modle/Students.hbm.xml"/>-->  
        <mapping class="com.ygc.hibernate.modle.Class"/>  
  
    </session-factory>  
  
</hibernate-configuration>  

第五步:添加log4j的配置文件就是用来打印日志的,记得添加log4j的jar包

# Configure logging for testing: optionally with log file  
# debug,info,warn,error,fatal  
log4j.rootLogger=debug, stdout, logfile  
  
log4j.appender.stdout=org.apache.log4j.ConsoleAppender  
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout  
log4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - %m%n  
  
log4j.appender.logfile=org.apache.log4j.FileAppender  
log4j.appender.logfile.File=D:/logs/hibernate.log  
log4j.appender.logfile.layout=org.apache.log4j.PatternLayout  
log4j.appender.logfile.layout.ConversionPattern=%d %p [%c] - %m%n  
  
log4j.logger.org.hibernate.tool.hbm2ddl=debug  

最后一步运行查看结果

C:\Documents and Settings\Administrator>mysql -uroot -proot  
Welcome to the MySQL monitor.  Commands end with ; or \g.  
Your MySQL connection id is 3  
Server version: 5.5.15 MySQL Community Server (GPL)  
  
Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved.  
  
Oracle is a registered trademark of Oracle Corporation and/or its  
affiliates. Other names may be trademarks of their respective  
owners.  
  
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. 

 
mysql> show databases;  
+--------------------+  
| Database           |  
+--------------------+  
| information_schema |  
| hibernate          |  
| hibernates         |  
| mysql              |  
| performance_schema |  
| test               |  
| xqwy               |  
+--------------------+  
7 rows in set (0.01 sec)  

 

mysql> show tables;  
+---------------------+  
| Tables_in_hibernate |  
+---------------------+  
| class               |  
| music               |  
| product             |  
| students            |  
| teacher             |  
| xuxudan             |  
+---------------------+  
6 rows in set (0.08 sec)  
  
mysql> select * from class;  
Empty set (0.00 sec)  

mysql> select * from class;  
+----+------------+---------+  
| id | className  | teacher |  
+----+------------+---------+  
|  1 | 大学二年级 | 田红菊  |  
+----+------------+---------+  
1 row in set (0.00 sec)  
通过以上结果发现老师的身份证号码没有被插入到数据库,说明我们添加的@transient有效了。

0
0
查看评论

EJB中把某些字段不持久化

一个实体,就是一个持久化的领域对象。通常情况下,一个实体代表在关系数据库中的一张表,实体的一个实例对应于表中的一行。   JPA规范对实体的要求:   1、实体类必须使用javax.persistence.Entity进行注解(@Entity)。   2、实体类必须要有一个公共的或...
  • huang9012
  • huang9012
  • 2012-10-21 22:30
  • 1103

Hibernate实体类注解中如何忽略某些字段的映射

使用注解 @Transient在该字段上 例如:  @Transient    private int  name;     这样在映射数据表和对象关系时候就不会报在表中不存在该字段的问题;
  • u010015108
  • u010015108
  • 2016-11-24 15:42
  • 7328

hibernate中如何用Annotion注解设置Modle中的字段不持久化

hibernate中Modle中的有些属性不想创建表是在数据库中产生字段保存数据,当这种需求是我们可以设置@transient表示透明的当设置此属性是在创建数据库是可以对此属性忽略,在本例中模拟了一个班级表表名为MyClass 属性有数据库id 班级名称 班级老师 老师身份证号 我们的需求想把老师身...
  • qhs1573
  • qhs1573
  • 2013-09-19 23:48
  • 11252

JPA注解持久化

JPA注解持久化类很方便,需要jar包:ejb3-persistence.jar。我用以下三个类来说明用法。  sh原创 转载请注明:http://67566894.iteye.com/blog/659829  Java代码   @S...
  • BabyNiu411
  • BabyNiu411
  • 2014-05-19 16:34
  • 958

Hibernate中映射文件*.hbm.xml中type="date"和不写type="date"的区别?

在Hibernate中映射文件*.hbm.xml中type="date"和不写type="date"的区别: 第一种:type="date" <property name="createTime" type=...
  • u013456370
  • u013456370
  • 2016-04-19 22:27
  • 2822

@Transient注解

@Transient注解 java注解:http://tool.oschina.net/apidocs/apidoc?api=javaEE6 javax.persistence  Annotation Type Transient @Target(value={...
  • suyu_yuan
  • suyu_yuan
  • 2016-10-31 11:09
  • 1656

JPA使用指南 javax.persistence的注解配置

JPA使用指南 javax.persistence的注解配置 JPA注解持久化类很方便,需要jar包:ejb3-persistence.jar。我用以下三个类来说明用法。  Java代码   1. @SuppressWarnings("se...
  • mayunyun1987100
  • mayunyun1987100
  • 2014-06-19 12:34
  • 1827

注解@Transient的使用

实体类中使用了@Table注解后,想要添加表中不存在字段,就要使用@Transient这个注解了。在网上找的方法是要将这个注解添加到自定义字段的get方法上,这样做了之后程序报错,最后试了将该注解添加到定义该字段的头部即可,例如: @Transient private String str...
  • who_is_xiaoming
  • who_is_xiaoming
  • 2016-08-17 15:04
  • 7754

Hibernate注解详解(超全面不解释)

一。实体Bean 每个持久化POJO类都是一个实体Bean, 通过在类的定义中使用 @Entity 注解来进行声明。 声明实体Bean @Entity public class Flightimplements Serializable {   Long id; ...
  • sufei58
  • sufei58
  • 2015-09-05 11:24
  • 48411

Hibernate旅程(三)Hibernate持久化对象的三个状态

Hibernate中的对象有3中状态,瞬时对象(TransientObjects)、持久化对象(PersistentObjects)和离线对象(DetachedObjects也叫做脱管对象)。 下图3.1显示了瞬时对象、持久化对象和离线对象之间的关系以及它们之间的转换。 图3.1 ...
  • lovesummerforever
  • lovesummerforever
  • 2014-02-13 21:57
  • 28007
    个人资料
    • 访问:254736次
    • 积分:3923
    • 等级:
    • 排名:第9598名
    • 原创:134篇
    • 转载:193篇
    • 译文:0篇
    • 评论:38条
    博客专栏