hibernate中使用annotation映射的时候,如何指定实体类中的某些字段不映射到数据库?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了hibernate中使用annotation映射的时候,如何指定实体类中的某些字段不映射到数据库?相关的知识,希望对你有一定的参考价值。

比如实体类中有三个字段:id,name,other
如何让other不映射到数据库里面

可以, 但是对于同一个实体的两种配置方式不能同时使用。 参见hibernate 帮助:Note that you can mix the legacy hbm.xml use and the annotation approach. The resource element can be either an hbm file or an EJB3 XML deployment descriptor.你可以混用 hbm.xml 和注解方式。 资源说明可以使用 hbm方式,也可以使用 EJB3 XML方式。You can however not declare a class several times (whether annotated or through hbm.xml). You cannot mix configuration strategies (hbm vs annotations) in an entity hierarchy either.但是,你不能说明一个类多次,不管是注解还是配置文件方式。 在同一个实体层次(entity hierarchy)中也不能混用两种配置策略(文件与注释)。如果一个包中有了类注解,而不想用, 调整 packageToScan的设置吧。个人来说, 还是使用注解方式吧,毕竟离代码最近,容易维护。 如果是一些运行时需要维护的东东,放到配置文件中,并在注解中使用吧。 需要运行时配置不是不采用注解的理由。 参考技术A 加这个注解
@Transient本回答被提问者采纳

hibernate笔记--使用注解(annotation)方式配置单(双)向多对一的映射关系

  前面几篇都是介绍的用配置文件来实现实体类到数据库表的映射,这种方式是比较麻烦的,每一个pojo类都需要写一个相应的*.hbm.xml,无疑增加了很多代码量,不过也有优点就是利于维护,为了方便开发,Hibernate还提供了注解方式配置映射文件,非常灵活,减少了配置文件的冗余,虽然维护起来相对比较麻烦,但是的确很方便开发.现在开发中(据说)也越来越流行使用注解,这里贴一个使用注解开发的小例子.

  假设有两张表,一张书籍表Book,一张书籍分类表Category,很明显Book和Category是多对一的关系.使用注解应该这样配置:

新建Book实体类:

//entity表示需要持久化的实体类
@Entity
//实体类多对应的表
@Table(name="t_book")
public class Book {
    //id主键
    @Id
    //设置主键生成策略,这里的auto表示自增长 与native对应,
   //(strategy------表示主键生成策略:  
     //  GenerationType.AUTO   默认值。表示让ORM框架自动选择,对应hibernate中的native;
     //  GenerationType.TABLE  使用表一保存ID的值;
     //  GenerationType.IDENTITY  根据数据库的Identity字段生成;
     //  GenerationType.SEQUENCE  根据数据库表的Sequence字段生成;)
@GeneratedValue(strategy=GenerationType.AUTO) private int id; private String name; private double price; private String author; private Date pubDate; //get/set方法省略 }

新建Category实体类:

@Entity
@Table(name="t_category")
public class Category {

    @Id
    @GeneratedValue(strategy=GenerationType.AUTO)
    private int id;
    private String name;
    //一端的配置    @OneToMany(mappedBy="多端的属性")
    @OneToMany(mappedBy="category")
    private Set<Book> books=new HashSet<Book>();
//get/set方法省略
}

  将两个实体类添加到Hibernate.cfg.xml中去,注意因为添加的是类,不是xml文件,所以包名之间用的是"."而不是"/"相隔.

以上就完成了配置,是不是相当简单.下面新建一个测试类,测试1:自动生成表2:保存数据3:读取数据:

@Test
    public void testCreateDB(){
        Configuration cfg=new  Configuration().configure();
        SchemaExport se=new SchemaExport(cfg);
        se.create(true, true);
    }
    
    @Test
    public void testSave(){
        Session session=HibernateUtil.getSession();
        Book book=new Book();
        book.setAuthor("金庸");
        book.setName("鹿鼎记");
        book.setPrice(12.35);
        book.setPubDate(new Date());
        Book book1=new Book();
        book1.setAuthor("土豆");
        book1.setName("斗破苍穹");
        book1.setPrice(22.35);
        book1.setPubDate(new Date());
        
        Category c1=new Category();
        c1.setName("武侠类");
        book.setCategory(c1);
        
        Category c2=new Category();
        c2.setName("玄幻类");
        book1.setCategory(c2);
        
        session.save(book);
        session.save(book1);
        session.beginTransaction().commit();
        session.close();
    }
    
    @Test
    public void testGet(){
        Session session =HibernateUtil.getSession();
        
        Book b=(Book)session.get(Book.class, 1);
        System.out.println("书籍名称:"+b.getName()+",类别:"+b.getCategory().getName());
        System.out.println("=========================");
        Category c=(Category)session.get(Category.class, 1);
        System.out.print("类别:"+c.getName()+",书籍名称:");
        Iterator<Book> it = c.getBooks().iterator();
        while(it.hasNext()){
            System.out.print(it.next().getName());
        }
        session.beginTransaction().commit();
        session.close();        
    }

注意:

   1.使用注解需要导入的4个jar包:hibernate-commons-annotations.jar , hibernate-annotations.jar,ejb3-persistence.jar ,hibernate-jpa-2.0-api-1.0.1.Final.jar

  2.使用注解配置映射关系,不再需要*.hbm.xml文件,而是在实体类中以注解形式定义映射关系.

  3.注解在javax.persistence包下,而不是在hibernate包下,特别注意.

 

以上是关于hibernate中使用annotation映射的时候,如何指定实体类中的某些字段不映射到数据库?的主要内容,如果未能解决你的问题,请参考以下文章

使用 Hibernate Annotations 映射枚举类型

Hibernate Annotations/JPA 映射集合

hibernate中使用annotation映射的时候,如何指定实体类中的某些字段不映射到数据库?

hibernate笔记--使用注解(annotation)方式配置单(双)向多对一的映射关系

Hibernate 零配置之Annotation注解

hibernate关联映射注解