Hibernate Annotations(四)

普通一对多(延迟加载方式)

 @OneToMany(mappedBy = "troop", cascade = ...{CascadeType.ALL}, fetch = FetchType.LAZY)
    @OrderBy(clause = "name desc")
    public Set<Soldier> getSoldiers() ...{
        return soldiers;
    }

    @ManyToOne(fetch = FetchType.EAGER)
    @JoinColumn(name = "troop_fk")
    public Troop getTroop() ...{
        return troop;
    }

DeleteOrphan模式

 

 @OneToMany(mappedBy = "troop", cascade = ...{CascadeType.ALL}, fetch = FetchType.LAZY)
    @OrderBy(clause = "name desc")
    @org.hibernate.annotations.Cascade(org.hibernate.annotations.CascadeType.DELETE_ORPHAN)
    public Set<Soldier> getSoldiers() ...{
        return soldiers;
    }

    troop.getSoldiers().clear();
    s = openSession();
    tx = s.beginTransaction();
    s.merge( troop );
    tx.commit();
    s.close();
 OneToManySet

 

    @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
    @JoinColumn(name = "CUST_ID")
    @Sort(type = SortType.COMPARATOR, comparator = TicketComparator.class)
    public SortedSet<Ticket> getTickets() ...{
        return tickets;
    }

   public class TicketComparator implements Comparator<Ticket> ...{

    public int compare(Ticket ticket, Ticket ticket1) ...{
        if ( ticket == null || ticket1 == null ) ...{
            throw new IllegalStateException( "Ticket comparison only available through non null        tickets" );
        }
    return ticket1.getNumber().length() - ticket.getNumber().length();

    }
}
OneToManyCollection

 

    @OneToMany(targetEntity = org.hibernate.test.annotations.Discount.class,
            cascade = CascadeType.ALL, mappedBy = "owner")
    @Cascade(...{ALL})
    public Collection getDiscountTickets() ...{
        return discountTickets;
    }
JoinColumns

 

    @OneToMany(cascade = CascadeType.ALL, mappedBy = "parent")
    @BatchSize(size = 5)
    @javax.persistence.OrderBy("favoriteSuperhero asc, favoriteSinger desc")
    public Set<Child> children;

    @ManyToOne()
    @JoinColumns(...{
    @JoinColumn(name = "parentCivility", referencedColumnName = "isMale"),
    @JoinColumn(name = "parentLastName", referencedColumnName = "lastName"),
    @JoinColumn(name = "parentFirstName", referencedColumnName = "firstName")
            })
    public Parent parent;
    @Column(name = "fav_sup_hero")
    public String favoriteSuperhero;
    @Column(name = "fav_singer")
    public String favoriteSinger;
注:cascade的值只能从CascadeType.PERSIST(级联新建)、CascadeType.REMOVE(级联删除)、CascadeType.REFRESH(级联刷新)、CascadeType.MERGE(级联更新)中选择一个或多个。还有一个选择是使用CascadeType.ALL,表示选择全部四项。

时间: 2024-09-21 15:10:36

Hibernate Annotations(四)的相关文章

java.lang.ClassNotFoundException: org.hibernate.annotations.Entity

问题描述 最近要把hibernate从3.2升级到3.67.更换JAR包之后,报以下错误,但那个entity在hibernate3.jar包里面是有.先谢谢大家!gframework.web.context.ContextLoader.createWebApplicationContext(ContextLoader.java:282)atorg.springframework.web.context.ContextLoader.initWebApplicationContext(Context

使用Hibernate Annotations维护多对多关系的心得

说明 在HibernateAnnotations中通过@ManyToMany注解可定义多对多关联.同时,也需要通过注解@JoinTable描述关联表和关联条件.对于双向关联,其中一端必须定义为owner,另一端必须定义为inverse(在对关联表进行更性操作时这一端将被忽略).被关联端不必也不能描述物理映射,只需要一个简单的mappedBy参数,该参数包含了主体端的属性名,这样就绑定了双方的关系. 如何制作PO 1)找到CUBE--需要引入哪些类: import java.util.ArrayL

Hibernate Annotations实战(二)

我在前面一篇文章<Hibernate Annotations 实战-- 从 hbm.xml 到 Annotations>中,有很多开发者在谈论中提到,有没有必要从 hbm.xml 往 Annotations 上转移. 那么在这篇文章中我们就来讨论一下 hbm.xml 与 Annotations的优缺点,看看那种情况最适合你. 首先,讨论一下 xml 配置文件的优点, 个人认为主要优点就是当你改变底层配置时 不需要改变和重新编译代码,只需要在xml 中更改就可以了,例如 Hibernate.cf

Hibernate Annotations(一)

Entity注释 @Entity @BatchSize(size = 5)   //批处理 @Where(clause = "1=1")  //默认查询条件 @FilterDef(name = "minLength", parameters = ...{@ParamDef(name = "minLength", type = "integer")})  //过滤器 @Filters(...{ @Filter(name = &q

Hibernate Annotations实战--从hbm.xml到Annotations

从 hbm.xml 到 Annotations 下面让我们先看一个通常用 hbm.xml 映射文件的例子. 有3个类 .HibernateUtil.java 也就是 Hibernate文档中推荐的工具类,Person.java, Test.java 测试用的类.都在test.hibernate 包中. 每个类的代码如下: HibernateUtil: 01 package test.hibernate; 02 03 import org.hibernate.HibernateException;

Hibernate的四种查询方式(主键查询,HQL查询,Criteria查询,本地sql查询)和修改和添加

Hibernate的添加,修改,查询(三种查询方式)的方法: 案例演示: 1:第一步,导包,老生常谈了都是,省略: 2:第二步,创建数据库和数据表,表结构如下所示: 3:第三步创建实体类User.java 1 package com.bie.po; 2 /** 3 * @author BieHongLi 4 * @version 创建时间:2017年3月8日 下午5:17:23 5 * 6 */ 7 public class User { 8 9 private int id; 10 priva

hibernate annoation (四 lob)

hiberante sql映射对应 Java数据类型 Hibernate数据类型 标准SQL数据类型 (PS:对于不同的DB可能有所差异) byte.java.lang.Byte byte TINYINT short.java.lang.Short short SMALLINT int.java.lang.Integer integer INGEGER long.java.lang.Long long BIGINT float.java.lang.Float float FLOAT double

一口一口吃掉Hibernate(四)——多对一单向关联映射

      Hibernate对于数据库的操作,全部利用面向对象的思维来理解和实现的.一般的单独表的映射,相信大家都没有问题,但是对于一些表之间的特殊关系,Hibernate提供了一些独特的方式去简化它.       今天就来说说多对一的关联映射.       数据库中有多对一的关系,Hibernate自然也有对象的多对一的关联关系.比如用户和用户组,一个用户只属于一个组,一个组有多名用户.我们就可以说用户和用户组的关系就是多对一的关系.用对象的uml图表示一下:       在Hibernat

Hibernate Annotations(二)

复合主键的应用 (EmbeddedId) 主表 @Entity public class A implements Serializable...{     @EmbeddedId     private AId aId;     public AId getAId() ...{         return aId;     }     public void setAId(AId aId) ...{         this.aId = aId;     } } 复合主键   @Embedd