方式一:
po类Teacher
package com.hibernate.demo.po; import java.util.Date; import javax.persistence.Entity; import javax.persistence.Id; import javax.persistence.Table; import javax.persistence.Temporal; import javax.persistence.TemporalType; @Entity @Table(name="teacher") public class Teacher { private TeacherPK pk; private String title; private String yourWifeName; private Date birthDate; private boolean good; public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } public String getYourWifeName() { return yourWifeName; } public void setYourWifeName(String yourWifeName) { this.yourWifeName = yourWifeName; } @Temporal(TemporalType.TIME) public Date getBirthDate() { return birthDate; } public void setBirthDate(Date birthDate) { this.birthDate = birthDate; } public boolean isGood() { return good; } public void setGood(boolean good) { this.good = good; } @Id public TeacherPK getPk() { return pk; } public void setPk(TeacherPK pk) { this.pk = pk; } }
po 复合主键类TeacherPK
package com.hibernate.demo.po; import java.io.Serializable; import javax.persistence.Embeddable; @Embeddable public class TeacherPK implements 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; } @Override public boolean equals(Object obj) { TeacherPK pk = (TeacherPK)obj; if(this.id==pk.getId() && this.name.equals(pk.getName())){ return true; }else{ return false; } } @Override public int hashCode() { return this.name.hashCode(); } }
测试方法:
package com.hibernate.demo.po; import java.util.Date; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.cfg.AnnotationConfiguration; import org.junit.AfterClass; import org.junit.BeforeClass; import org.junit.Test; public class TestTeacher { private static SessionFactory sf = null; @BeforeClass public static void beforeClass(){ sf = new AnnotationConfiguration().configure().buildSessionFactory(); } @Test public void testSave(){ Session session = sf.openSession(); session.beginTransaction(); TeacherPK pk = new TeacherPK(); pk.setId(1); pk.setName("nameStr"); Teacher teacher = new Teacher(); teacher.setPk(pk); teacher.setBirthDate(new Date()); session.save(teacher); session.getTransaction().commit(); } @AfterClass public static void afterClass(){ sf.close(); } }
方式二(比第一种配置简单):
po类Teacher
package com.hibernate.demo.po; import java.util.Date; import javax.persistence.EmbeddedId; import javax.persistence.Entity; import javax.persistence.Id; import javax.persistence.Table; import javax.persistence.Temporal; import javax.persistence.TemporalType; @Entity @Table(name="teacher") public class Teacher { private TeacherPK pk; private String title; private String yourWifeName; private Date birthDate; private boolean good; public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } public String getYourWifeName() { return yourWifeName; } public void setYourWifeName(String yourWifeName) { this.yourWifeName = yourWifeName; } @Temporal(TemporalType.TIME) public Date getBirthDate() { return birthDate; } public void setBirthDate(Date birthDate) { this.birthDate = birthDate; } public boolean isGood() { return good; } public void setGood(boolean good) { this.good = good; } @EmbeddedId public TeacherPK getPk() { return pk; } public void setPk(TeacherPK pk) { this.pk = pk; } }
复合主键类TeacherPK
package com.hibernate.demo.po; import java.io.Serializable; public class TeacherPK implements 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; } @Override public boolean equals(Object obj) { TeacherPK pk = (TeacherPK)obj; if(this.id==pk.getId() && this.name.equals(pk.getName())){ return true; }else{ return false; } } @Override public int hashCode() { return this.name.hashCode(); } }
测试代码不变。。。
方式三:
package com.hibernate.demo.po; import java.util.Date; import javax.persistence.EmbeddedId; import javax.persistence.Entity; import javax.persistence.Id; import javax.persistence.IdClass; import javax.persistence.Table; import javax.persistence.Temporal; import javax.persistence.TemporalType; @Entity @Table(name="teacher") @IdClass(value=TeacherPK.class) public class Teacher { // private TeacherPK pk; private int id; private String name; private String title; private String yourWifeName; private Date birthDate; private boolean good; @Id public int getId() { return id; } public void setId(int id) { this.id = id; } @Id public String getName() { return name; } public void setName(String name) { this.name = name; } public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } public String getYourWifeName() { return yourWifeName; } public void setYourWifeName(String yourWifeName) { this.yourWifeName = yourWifeName; } @Temporal(TemporalType.TIME) public Date getBirthDate() { return birthDate; } public void setBirthDate(Date birthDate) { this.birthDate = birthDate; } public boolean isGood() { return good; } public void setGood(boolean good) { this.good = good; } // @EmbeddedId // public TeacherPK getPk() { // return pk; // } // public void setPk(TeacherPK pk) { // this.pk = pk; // } }
此处省略TeacherPK和测试代码。。
相关推荐
这篇文档将介绍如何使用Hibernate注解来生成复合主键或嵌入式主键。 复合主键(Composite Key)是指由两个或更多个列共同构成的唯一标识,而嵌入式主键(Embedded Key)则是将主键字段嵌入到实体类内部。在不使用...
- 当实体类的主键由多个属性组成时,可以使用 `@EmbeddedId` 注解配合一个嵌入式 ID 类来定义复合主键。 7. **关系映射** - Hibernate 注解还支持各种关系映射,如 `@OneToOne`, `@ManyToOne`, `@OneToMany`, `@...
- **2.2.6 映射复合主键与外键** - 使用 `@CompositeId` 和 `@JoinColumns` 来定义复杂的主键和外键映射。 - **2.2.7 映射二级表(secondary tables)** - 有时候需要将实体Bean的部分属性映射到另外一张表上,...
- **复合主键映射**:使用 `@EmbeddedId` 或 `@IdClass` 来映射复合主键。 - **次级表映射**:使用 `@SecondaryTable` 注解来映射实体与次级表的关系。 - **实体缓存**:使用 `@Cacheable` 和 `@Cache(usage = ...
- **复合主键**:使用 @EmbeddedId 映射复合主键。 - **继承策略**:通过 @Inheritance 和 @DiscriminatorColumn 定义继承策略,实现不同子类共用同一张表或多表继承。 ##### 3.3 关联映射 - **一对一关联**:使用...
- 使用 `@CompositeId` 和 `@JoinColumns` 来映射复合主键。 - 使用 `@JoinColumn` 注解来指定外键映射。 - **映射二级表(secondary tables)** - 使用 `@SecondaryTables` 和 `@SecondaryTable` 注解来映射多个...
- `@Embeddable`: 标记一个类为可嵌入的,这个类的实例可以作为其他类的复合主键的一部分。 10. **缓存配置** - `@Cacheable`: 开启实体的缓存支持,提高数据读取速度。 - `@Cache`: 配置缓存区域和策略,如READ...
7.5.1 @annotation() 7.5.2 execution() 7.5.3 args()和@args() 7.5.4 within() 7.5.5 @within()和@target() 7.5.6 target()的this() 7.6 @AspectJ进阶 7.6.1 切点复合运算 7.6.2 命名切点 7.6.3 ...
7.5.1 @annotation() 7.5.2 execution() 7.5.3 args()和@args() 7.5.4 within() 7.5.5 @within()和@target() 7.5.6 target()的this() 7.6 @AspectJ进阶 7.6.1 切点复合运算 7.6.2 命名切点 7.6.3 ...