`

注解方式映射复合主键

阅读更多

今天开发中遇到复合主键的问题,项目赶时间所以我选用了注解的方式来配置实体了,那么从配置到使用的具体过程如下了

 1. 配置

   一般都把复合主键歌令放到一个类中如下:

   import java.io.Serializable;

public class WanbuStateMonthPerPK implements Serializable {//主键类 必须实现序列化
 private Integer beginTime;// 主键
 private Integer userid; // 主键

 public WanbuStateMonthPerPK() {// 必须有默认构造
  super();
  // TODO Auto-generated constructor stub
 }

 @Override
 public boolean equals(Object obj) {// 必须重写equals() 和 hashcode()不过这个可以用myeclipse来生成快捷键 shift+alt+r+h 也可借助于commonclipse插件
  if (this == obj)
   return true;
  if (obj == null)
   return false;
  if (getClass() != obj.getClass())
   return false;
  final WanbuStateMonthPerPK other = (WanbuStateMonthPerPK) obj;
  if (beginTime == null) {
   if (other.beginTime != null)
    return false;
  } else if (!beginTime.equals(other.beginTime))
   return false;
  if (userid == null) {
   if (other.userid != null)
    return false;
  } else if (!userid.equals(other.userid))
   return false;
  return true;
 }

 public Integer getBeginTime() {
  return beginTime;
 }

 public Integer getUserid() {
  return userid;
 }

 @Override
 public int hashCode() {
  final int prime = 31;
  int result = 1;
  result = prime * result
    + ((beginTime == null) ? 0 : beginTime.hashCode());
  result = prime * result + ((userid == null) ? 0 : userid.hashCode());
  return result;
 }

 public void setBeginTime(Integer beginTime) {
  this.beginTime = beginTime;
 }

 public void setUserid(Integer userid) {
  this.userid = userid;
 }

}

 

  需要映射的实体类

import javax.persistence.*;

@Entity// 该类是持久化类
@Table(name="Wanbu_state_Monthper")// 映射表
@IdClass(WanbuStateMonthPerPK.class)// 使用的主键类

public class WanbuStateMonthper {
 

  @Id
   private Integer beginTime; // @id 用来表明与主键类所对应的字段
   @Id

   private Integer userid; 
   private Integer updateTime;
   private Long monthperSteps;
   
   
   
  public WanbuStateMonthper() {
  super();
  // TODO Auto-generated constructor stub
 }

 public WanbuStateMonthper(Long monthSteps){
   this.monthperSteps=monthSteps; 
  }

 

public Integer getBeginTime() {
  return beginTime;
 }

 public Integer getUserid() {
  return userid;
 }

public void setBeginTime(Integer beginTime) {
  this.beginTime = beginTime;
 }

 public void setUserid(Integer userid) {
  this.userid = userid;
 }

 public int getUpdateTime() {
  return updateTime;
 }
 public void setUpdateTime(int updateTime) {
  this.updateTime = updateTime;
 }
 public Long getMonthperSteps() {
  return monthperSteps;
 }

 public void setMonthperSteps(Long monthperSteps) {
  this.monthperSteps = monthperSteps;
 }


 public WanbuStateMonthPerPK getMonthPK() {
  return monthPK;
 }

 public void setMonthPK(WanbuStateMonthPerPK monthPK) {
  this.monthPK = monthPK;
 }

}

  2,配置完成了我们来看看怎么用吧

       要用他们必须在hibernate-cfg.xml 中进行映射  <mapping  class="完全限定类名" />

       不过在用注解时候我们获取SessionFactory 是 只能通过 SessionFactory factory = new AnnotationConfiguration().configure().buildSessionFactory(); l来加载实例化hibernate-cfg.xml 了。。 

3.  等一切配置成功我们就可以使用他了 下面来看看如何使用它和使用它完成了什么。

    先看代码:假设数据库已连接上并且session 已开

       WanbuStateMonthPerPK monthpk=new WanbuStateMonthPerPK();
       monthpk.setUserid(Integer.parseInt(uid));
       monthpk.setBeginTime(super.getIntByDate(f.parse(sRet),"yyyyMMdd"));
     WanbuStateMonthPer    monthinfo=supper.get(WanbuStateMonthper.class, monthpk); //调用hibernate的get方法

    使用前先给主键类赋值然后调用hibernate的get方法即可获取满足于userid=uid and begintime=你传的值的WanbuStateMonthPer 对象

    因为复合主键只用当所需字段都相同时候才认为是唯一对象。。。。
 
分享到:
评论
2 楼 jfz703127 2012-12-05  
1 楼 jfz703127 2012-12-03  

相关推荐

    hibernate复合主键映射

    在Java的持久化框架Hibernate中...总之,Hibernate通过`@Embeddable`和`@EmbeddedId`注解支持复合主键的映射,允许开发者根据业务需求灵活地设计数据模型。理解并掌握这一特性,对于提升Java应用的持久化能力至关重要。

    hibernate 无主键表映射

    `@Embeddable`注解用于定义一个包含复合主键字段的类,而`@EmbeddedId`注解则用在实体类上,指定这个复合主键类。 以下是一个简单的示例: 1. **复合主键类(Composite Key Class)** ```java import javax....

    hibernate复合主键配置和使用

    3. 在使用复合主键时,要注意避免在多对一或一对多关系中直接使用复合主键作为外键,这可能导致映射问题。 总结,Hibernate对复合主键的处理为开发者提供了灵活性,使得处理复杂数据模型变得更加便捷。通过正确配置...

    hibernate复合主键设置

    在Hibernate的映射文件(XML方式)或者使用JPA注解(Java方式)中,需要为复合主键提供相应的配置。对于XML配置,你可能会看到类似以下的设置: ```xml &lt;!-- 其他属性的映射 --&gt; ``` 而在JPA注解...

    Hibernate复合主键.

    在Hibernate中,我们可以使用`@IdClass`或`@EmbeddedId`注解来处理复合主键。 1. 使用@IdClass `@IdClass`注解用于指定一个单独的类作为复合主键的载体。这个类通常包含与复合主键相关的属性,并且需要实现`java....

    hibernate复合主键的实例

    接下来,我们需要在对应的实体类中使用`@EmbeddedId`注解引用我们的复合主键类。例如: ```java import javax.persistence.Entity; import javax.persistence.EmbeddedId; import javax.persistence.Table; @...

    hibernate3 注释生成复合主键或者嵌入式主键的方法及实例.doc

    通过这种方式,Hibernate将知道如何处理`UserRole`类,将其映射到具有复合主键的数据库表。 3. 嵌入式主键(Embedded Id): 如果希望将主键字段作为实体类的一部分,而不是单独的类,可以使用`@EmbeddedId`和`@...

    Hibernate中对数据库复合主键的支持.pdf

    以注解为例,可以使用`@EmbeddedId`注解来指定一个复合主键: ```java import javax.persistence.EmbeddedId; import javax.persistence.Entity; @Entity public class Person { @EmbeddedId private PersonId ...

    hibernate注解处理映射关系共14页.pdf.zip

    在Java世界中,Hibernate是一个非常重要的对象关系映射(ORM)框架,它简化了数据库操作,使得开发者可以使用面向对象的方式来处理数据。本资料“hibernate注解处理映射关系共14页.pdf.zip”显然是一个关于Hibernate...

    Hibernate教程08_关系映射之联合主键

    这样做可以让Hibernate知道哪些字段应该被视为复合主键的一部分。 例如,在`s2sh_relation05_one2one_uni_fk_composite`的示例中,假设我们有一个`Student`实体和一个`Address`实体,它们之间存在一对一(One-to-...

    hibernate注解详解说明

    #### 映射复合主键与外键 - `@EmbeddedId` 和 `@Embeddable`:用于创建复合主键,将多个字段组合成一个主键。 - `@ManyToOne` 和 `@OneToOne` 可以配合 `@MapsId` 将外键作为实体的一部分。 #### 映射二级表...

    hibernate _annotation 注解编程

    - **复合主键映射**:使用 `@EmbeddedId` 或 `@IdClass` 来映射复合主键。 - **次级表映射**:使用 `@SecondaryTable` 注解来映射实体与次级表的关系。 - **实体缓存**:使用 `@Cacheable` 和 `@Cache(usage = ...

    Hibernate注解和xml配置介绍

    对于双主键中的两个主键都被作为外键使用的情况,可以在复合主键内部定义好映射关系,并使用来分别标识这些字段作为外键。 Hibernate的映射配置对于实现复杂的数据库操作非常重要,了解和掌握Hibernate注解和XML...

    Hibernate_关联关系映射配置

    这时,我们需要使用`@EmbeddedId`和`@Embeddable`注解来定义复合主键类和其属性。`@EmbeddedId`用于指定实体的主键类,而`@Embeddable`则用于声明这个类为复合主键类。 六、延迟加载(Lazy Loading) Hibernate...

    hibernate知识复习二:组合映射

    2. **复合主键映射**:使用`@Embeddable`和`@EmbeddedId`注解,定义一个包含多个字段的复合主键类,这个类作为子对象的一部分,存储在父对象的表中。 3. **一对一嵌入映射**:使用`@OneToOne`配合`@MapsId`和`@...

    hibernate 中文注解

    - **映射复合主键与外键:** 复合主键通过`@IdClass`或`@EmbeddedId`注解实现。 - **映射二级表(secondary tables):** 使用`@SecondaryTables`注解来映射多个表。 #### 四、映射查询 - **映射EJBQL/HQL查询:** ...

    Hibernate 相关映射关系

    5. **复合主键映射(Composite Key)** 当表的主键由多个字段组成时,需要使用复合主键。在Hibernate中,可以使用`@EmbeddedId`和`@Embeddable`注解来实现。例如,一个订单由订单号和产品ID共同构成主键。 6. **...

    05_JPA详解_日期_枚举等字段类型的JPA映射.zip

    主键的映射可以使用`@Id`,复合主键则使用`@IdClass`或`@EmbeddedId`。 ### 6. 映射关系 JPA提供了多种关系映射方式,如一对一(@OneToOne)、一对多(@OneToMany)、多对一(@ManyToOne)和多对多(@ManyToMany)...

Global site tag (gtag.js) - Google Analytics