hibernate--联合主键(了解+,掌握-)
来源:互联网 发布:linux自启动脚本编写 编辑:程序博客网 时间:2024/05/01 18:29
如果一个表有多个主键(= =一般比较少)
8.4. 组件作为联合标识符(Components as composite identifiers)
先定义一个类OrderLineId(实现接口,implems java.io.Serializable(把当前对象序列化的接口)),
重写
为什么要序列化?内存满和集群化的时候用,具体百度(= =!其实我就是不懂)
里面有多个成员变量(字段(这些都是主键))
package com.zjx.hibernate;public class StudentPK implements java.io.Serializable{private int id;private String name;public int getId() {return id;}public void setId(int id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}@Overridepublic boolean equals(Object o) { //判断是否相等,相等就找它if(o instanceof StudentPK) { //如果o是一个StudentPK对象StudentPK pk = (StudentPK)o;if(this.id == pk.getId() && this.name.equals(pk.getName())) {return true;}}return false;}@Overridepublic int hashCode() { //计算主键的hash码 if有多个对象 就直接找hash码 return this.name.hashCode();}}
然后在 类Student中 创建OrderLineId成员变量,set,get一下,
package com.zjx.hibernate;public class Student {private StudentPK pk;private int age;private String sex;private boolean good;public boolean isGood() {return good;}public void setGood(boolean good) {this.good = good;}/*public int getId() {return id;}public void setId(int id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}*/public int getAge() {return age;}public void setAge(int age) {this.age = age;}public String getSex() {return sex;}public void setSex(String sex) {this.sex = sex;}public StudentPK getPk() {return pk;}public void setPk(StudentPK pk) {this.pk = pk;}}
其他都一样 就是hbm.xml配置文件改成如下
<?xml version="1.0"?><!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"><hibernate-mapping><class name="com.bjsxt.hibernate.Student"><composite-id name="pk" class="com.zjx.hibernate.StudentPK"><key-property name="id"></key-property><key-property name="name"></key-property></composite-id><property name="age" /><property name="sex" /><property name="good" type="yes_no"></property> </class></hibernate-mapping>
如果是使用注释?
2.2.. 映射主键属性
下面是定义组合主键的几种语法:
- 将组件类注解为@Embeddable,并将组件的属性注解为@Id(比较少用)
- 将组件的属性注解为@EmbeddedId
- 将类注解为@IdClass,并将该实体中所有属于主键的属性都注解为@Id
对于EJB2的开发人员来说 @IdClass是很常见的, 但是对于Hibernate的用户来说就是一个崭新的用法.
组合主键类对应了一个实体类中的多个字段或属性,
而且主键类中用于定义主键的字段或属性和 实体类中对应的字段或属性在类型上必须一致.下面我们看一个例子:
@Entity@IdClass(FootballerPk.class)public class Footballer { //part of the id key @Id public String getFirstname() { return firstname; } public void setFirstname(String firstname) { this.firstname = firstname; } //part of the id key @Id public String getLastname() { return lastname; } public void setLastname(String lastname) { this.lastname = lastname; } public String getClub() { return club; } public void setClub(String club) { this.club = club; } //appropriate equals() and hashCode() implementation}@Embeddablepublic class FootballerPk implements Serializable { //same name and type as in Footballer public String getFirstname() { return firstname; } public void setFirstname(String firstname) { this.firstname = firstname; } //same name and type as in Footballer public String getLastname() { return lastname; } public void setLastname(String lastname) { this.lastname = lastname; } //appropriate equals() and hashCode() implementation}
如上, @IdClass指向对应的主键类.
Hibernate支持在组合标识符中定义关联(就像使用普通的注解一样),而EJB3规范并不支持此类用法.
@Entity@AssociationOverride( name="id.channel", joinColumns = @JoinColumn(name="chan_id") )public class TvMagazin { @EmbeddedId public TvMagazinPk id; @Temporal(TemporalType.TIME) Date time;}@Embeddablepublic class TvMagazinPk implements Serializable { @ManyToOne public Channel channel; public String name; @ManyToOne public Presenter presenter;}@IdClass(TeacherPK.class);
那么就能使用TeacherPK的东西;
t.setId(1);
t.setName("t1");
t.setName("t1");
0 0
- hibernate--联合主键(了解+,掌握-)
- Hibernate 中的联合主键
- hibernate 联合主键
- hibernate操作联合主键
- Hibernate 中的联合主键
- hibernate 联合主键 merge
- Hibernate联合主键
- hibernate 联合主键
- hibernate联合主键关联
- hibernate联合主键
- 慎用hibernate联合主键
- hibernate 联合主键
- Hibernate 联合主键
- hibernate联合主键用法
- hibernate联合主键相关
- hibernate联合主键
- hibernate 与联合主键
- hibernate配置联合主键
- const
- poj 2942&&uva 3523 Knights of the Round Table(图的连通性)
- 我读C++ Primer - 基本类型与变量
- Clojure笔记——apply
- web开发设计--JS的innerHTML/display属性
- hibernate--联合主键(了解+,掌握-)
- CCNA_生成树计算原则
- Android SDK Manager下载包时出现:Download interrupted: Read timed out
- 虚基类
- jquery中json数据转换为字典
- 设计模式六大原则(1):单一职责原则
- 数论--欧几里得和扩展的欧几里得定理
- eclipse启动不起来且没有报错
- hdu3549-网络流水题