今天开发中遇到复合主键的问题,项目赶时间所以我选用了注解的方式来配置实体了,那么从配置到使用的具体过程如下了
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 对象
因为复合主键只用当所需字段都相同时候才认为是唯一对象。。。。
分享到:
相关推荐
在Java的持久化框架Hibernate中...总之,Hibernate通过`@Embeddable`和`@EmbeddedId`注解支持复合主键的映射,允许开发者根据业务需求灵活地设计数据模型。理解并掌握这一特性,对于提升Java应用的持久化能力至关重要。
`@Embeddable`注解用于定义一个包含复合主键字段的类,而`@EmbeddedId`注解则用在实体类上,指定这个复合主键类。 以下是一个简单的示例: 1. **复合主键类(Composite Key Class)** ```java import javax....
3. 在使用复合主键时,要注意避免在多对一或一对多关系中直接使用复合主键作为外键,这可能导致映射问题。 总结,Hibernate对复合主键的处理为开发者提供了灵活性,使得处理复杂数据模型变得更加便捷。通过正确配置...
在Hibernate的映射文件(XML方式)或者使用JPA注解(Java方式)中,需要为复合主键提供相应的配置。对于XML配置,你可能会看到类似以下的设置: ```xml <!-- 其他属性的映射 --> ``` 而在JPA注解...
在Hibernate中,我们可以使用`@IdClass`或`@EmbeddedId`注解来处理复合主键。 1. 使用@IdClass `@IdClass`注解用于指定一个单独的类作为复合主键的载体。这个类通常包含与复合主键相关的属性,并且需要实现`java....
接下来,我们需要在对应的实体类中使用`@EmbeddedId`注解引用我们的复合主键类。例如: ```java import javax.persistence.Entity; import javax.persistence.EmbeddedId; import javax.persistence.Table; @...
通过这种方式,Hibernate将知道如何处理`UserRole`类,将其映射到具有复合主键的数据库表。 3. 嵌入式主键(Embedded Id): 如果希望将主键字段作为实体类的一部分,而不是单独的类,可以使用`@EmbeddedId`和`@...
以注解为例,可以使用`@EmbeddedId`注解来指定一个复合主键: ```java import javax.persistence.EmbeddedId; import javax.persistence.Entity; @Entity public class Person { @EmbeddedId private PersonId ...
在Java世界中,Hibernate是一个非常重要的对象关系映射(ORM)框架,它简化了数据库操作,使得开发者可以使用面向对象的方式来处理数据。本资料“hibernate注解处理映射关系共14页.pdf.zip”显然是一个关于Hibernate...
这样做可以让Hibernate知道哪些字段应该被视为复合主键的一部分。 例如,在`s2sh_relation05_one2one_uni_fk_composite`的示例中,假设我们有一个`Student`实体和一个`Address`实体,它们之间存在一对一(One-to-...
#### 映射复合主键与外键 - `@EmbeddedId` 和 `@Embeddable`:用于创建复合主键,将多个字段组合成一个主键。 - `@ManyToOne` 和 `@OneToOne` 可以配合 `@MapsId` 将外键作为实体的一部分。 #### 映射二级表...
- **复合主键映射**:使用 `@EmbeddedId` 或 `@IdClass` 来映射复合主键。 - **次级表映射**:使用 `@SecondaryTable` 注解来映射实体与次级表的关系。 - **实体缓存**:使用 `@Cacheable` 和 `@Cache(usage = ...
对于双主键中的两个主键都被作为外键使用的情况,可以在复合主键内部定义好映射关系,并使用来分别标识这些字段作为外键。 Hibernate的映射配置对于实现复杂的数据库操作非常重要,了解和掌握Hibernate注解和XML...
这时,我们需要使用`@EmbeddedId`和`@Embeddable`注解来定义复合主键类和其属性。`@EmbeddedId`用于指定实体的主键类,而`@Embeddable`则用于声明这个类为复合主键类。 六、延迟加载(Lazy Loading) Hibernate...
2. **复合主键映射**:使用`@Embeddable`和`@EmbeddedId`注解,定义一个包含多个字段的复合主键类,这个类作为子对象的一部分,存储在父对象的表中。 3. **一对一嵌入映射**:使用`@OneToOne`配合`@MapsId`和`@...
- **映射复合主键与外键:** 复合主键通过`@IdClass`或`@EmbeddedId`注解实现。 - **映射二级表(secondary tables):** 使用`@SecondaryTables`注解来映射多个表。 #### 四、映射查询 - **映射EJBQL/HQL查询:** ...
5. **复合主键映射(Composite Key)** 当表的主键由多个字段组成时,需要使用复合主键。在Hibernate中,可以使用`@EmbeddedId`和`@Embeddable`注解来实现。例如,一个订单由订单号和产品ID共同构成主键。 6. **...
主键的映射可以使用`@Id`,复合主键则使用`@IdClass`或`@EmbeddedId`。 ### 6. 映射关系 JPA提供了多种关系映射方式,如一对一(@OneToOne)、一对多(@OneToMany)、多对一(@ManyToOne)和多对多(@ManyToMany)...