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;
    }
}
复合主键

 

@Embeddable
public class AId implements Serializable ...{

    @OneToOne
    @JoinColumn( name = "bid" )
    private B b;

    @OneToOne
    @JoinColumn( name = "cid" )
    private C c;

    public B getB() ...{
        return b;
    }

    public void setB(B b) ...{
        this.b = b;
    }

    public C getC() ...{
        return c;
    }

    public void setC(C c) ...{
        this.c = c;
    }
}
关联表

 

@Entity
public class B ...{

    @Id
    @GeneratedValue
    private Long id;

    public Long getId() ...{
        return id;
    }

    public void setId(Long id) ...{
        this.id = id;
    }
}

@Entity
public class C ...{

    @Id
    @GeneratedValue
    private Long id;

    public Long getId() ...{
        return id;
    }

    public void setId(Long id) ...{
        this.id = id;
    }
}
复合主键的应用 (IdClass)

主表

 

@Entity
@IdClass(OrderLinePk.class)
public class OrderLine ...{
    @Id
    public Order order;
    @Id
    public Product product;
}
主键类

 

public class OrderLinePk implements Serializable ...{
    @ManyToOne
    @JoinColumn(name = "foo", nullable = false)
    public Order order;
    @ManyToOne
    @JoinColumn(name = "bar", nullable = false)
    public Product product;   
}

关联表

 

@Entity
public class Product ...{
    @Id
    public String name;
}

@Entity
@Table(name = "OrderTableFoobar")
public class Order ...{
    @Id
    @GeneratedValue
    public Integer id;
}

 

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

Hibernate Annotations(二)的相关文章

Hibernate Annotations实战(二)

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

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(四)

普通一对多(延迟加载方式)  @OneToMany(mappedBy = "troop", cascade = ...{CascadeType.ALL}, fetch = FetchType.LAZY)     @OrderBy(clause = "name desc")     public Set<Soldier> getSoldiers() ...{         return soldiers;     }     @ManyToOne(fet

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之二 Session中load和get

用hibernate的ORM框架有一段时间了,现在来回顾一下Seesion中的load和get. 一.get不支持lazy,load支持lazy. 二.采用get加载数据,如果没有匹配的数据,返回null,而load则抛出异常. get的例子: 1public void testGetMethod() { 2 Session session = null; 3 try { 4 session = HibernateUtils.getSession(); 5 session.beginTransa

hibernate annoation (二 创建表)

为了追踪hibernate的信息 <property name="hibernate.show_sql">true</property> 新建User类: @Entity @Table(name="E_USER",uniqueConstraints={ @UniqueConstraint(columnNames={"yahoo"}) }) public class User { private int id; privat

一口一口吃掉Hibernate(二)——别被世俗蒙蔽了双眼:Hibernate中Session之get和load方法的真正区别

      最近在学习SHH框架中的Hibernate,对Session的get和load方法,有点混不清楚,不知道区别在哪,或者对它们的区别感触不深.所以百度了一下,结果问题来了.百度的结果和实际测试的结果出入很大.主要是对get方法的说法跟实际运行的结果不一致.       先说一下观点吧: get不支持lazy,load支持lazy: 数据不存在时,get返回null,load则抛出ObjectNotFoundException异常. load方法可以返回实体的代理类实例,而get方法直接