使用类一级的 @SecondaryTable或@SecondaryTables注解可以实现单个实体到多个表的映射. 使用 @Column或者 @JoinColumn注解中的table参数可指定某个列所属的特定表.
使用类一级的 @SecondaryTable或@SecondaryTables注解可以实现单个实体到多个表的映射. 使用 @Column或者 @JoinColumn注解中的table参数可指定某个列所属的特定表.
用例代码如下:
- 数据库DDL语句
1,CAT表
1 create table CAT 2 ( 3 id VARCHAR2(32 CHAR) not null, 4 create_time TIMESTAMP(6), 5 update_time TIMESTAMP(6), 6 cat_name VARCHAR2(255 CHAR), 7 first_name VARCHAR2(255 CHAR), 8 last_name VARCHAR2(255 CHAR), 9 version NUMBER(10) not null10 )
2,CAT_INFO表
1 create table CAT_INFO2 (3 address VARCHAR2(255 CHAR),4 birthday TIMESTAMP(6),5 cat_id VARCHAR2(32 CHAR) not null6 )
3,CAT_INFO_2表
1 create table CAT_INFO_22 (3 gender NUMBER(10),4 mobile VARCHAR2(255 CHAR),5 cat_id VARCHAR2(32 CHAR) not null6 )
- hibernate.cfg.xml
1 2 56 7 8 21org.hibernate.dialect.Oracle10gDialect 9oracle.jdbc.OracleDriver 10jdbc:oracle:thin:@127.0.0.1:1521:orcl 11wxuatuser 12xlh 13true 14 15update 16 17 1819 20
- java类
实体类 - 基类
1 package model; 2 import java.io.Serializable; 3 import java.util.Date; 4 import javax.persistence.Column; 5 import javax.persistence.GeneratedValue; 6 import javax.persistence.Id; 7 import javax.persistence.MappedSuperclass; 8 import org.hibernate.annotations.GenericGenerator; 9 /**10 * 实体类 - 基类11 */12 @MappedSuperclass13 public class BaseEntity implements Serializable {14 15 private static final long serialVersionUID = -6718838800112233445L;16 17 private String id;// ID18 private Date create_time;// 创建日期19 private Date update_time;// 修改日期20 @Id21 @Column(length = 32, nullable = true)22 @GeneratedValue(generator = "uuid")23 @GenericGenerator(name = "uuid", strategy = "uuid")24 public String getId() {25 return id;26 }27 public void setId(String id) {28 this.id = id;29 }30 @Column(updatable = false)31 public Date getCreate_time() {32 return create_time;33 }34 public void setCreate_time(Date create_time) {35 this.create_time = create_time;36 }37 public Date getUpdate_time() {38 return update_time;39 }40 public void setUpdate_time(Date update_time) {41 this.update_time = update_time;42 }43 @Override44 public int hashCode() {45 return id == null ? System.identityHashCode(this) : id.hashCode();46 }47 @Override48 public boolean equals(Object obj) {49 if (this == obj) {50 return true;51 }52 if (obj == null) {53 return false;54 }55 if (getClass().getPackage() != obj.getClass().getPackage()) {56 return false;57 }58 final BaseEntity other = (BaseEntity) obj;59 if (id == null) {60 if (other.getId() != null) {61 return false;62 }63 } else if (!id.equals(other.getId())) {64 return false;65 }66 return true;67 }68 }
实体类
1 package a6_SecondaryTable; 2 import java.util.Date; 3 import javax.persistence.AttributeOverride; 4 import javax.persistence.AttributeOverrides; 5 import javax.persistence.Column; 6 import javax.persistence.Embedded; 7 import javax.persistence.Entity; 8 import javax.persistence.PrimaryKeyJoinColumn; 9 import javax.persistence.SecondaryTable;10 import javax.persistence.SecondaryTables;11 import javax.persistence.Table;12 import javax.persistence.Version;13 import model.BaseEntity;14 import org.hibernate.annotations.DynamicInsert;15 import org.hibernate.annotations.DynamicUpdate;16 17 @Entity18 @DynamicInsert19 @DynamicUpdate20 @Table(name="CAT")21 @SecondaryTables( value = {22 @SecondaryTable(name="CAT_INFO",pkJoinColumns=@PrimaryKeyJoinColumn(name="CAT_ID")),23 @SecondaryTable(name="CAT_INFO_2",pkJoinColumns=@PrimaryKeyJoinColumn(name="CAT_ID")) })24 public class CatSecondaryTables extends BaseEntity{25 /**26 * 实体类27 */28 private static final long serialVersionUID = -2776330321385582872L;29 30 private String cat_name;31 private Name name;32 private int version;33 private String address;34 private Date birthday;35 private Integer gender;36 private String mobile;37 38 @Version39 public int getVersion() {40 return version;41 }42 43 public void setVersion(int version) {44 this.version = version;45 }46 47 public String getCat_name() {48 return cat_name;49 }50 51 public void setCat_name(String cat_name) {52 this.cat_name = cat_name;53 }54 55 @Embedded56 @AttributeOverrides({57 @AttributeOverride(name = "first_name", column = @Column(name = "first_name")),58 @AttributeOverride(name = "last_name", column = @Column(name = "last_name")) })59 public Name getName() {60 return name;61 }62 63 public void setName(Name name) {64 this.name = name;65 }66 @Column(name="ADDRESS", table="CAT_INFO") 67 public String getAddress() {68 return address;69 }70 71 public void setAddress(String address) {72 this.address = address;73 }74 @Column(name="BIRTHDAY", table="CAT_INFO") 75 public Date getBirthday() {76 return birthday;77 }78 79 public void setBirthday(Date birthday) {80 this.birthday = birthday;81 }82 @Column(name="GENDER", table="CAT_INFO_2") 83 public Integer getGender() {84 return gender;85 }86 87 public void setGender(Integer gender) {88 this.gender = gender;89 }90 @Column(name="MOBILE", table="CAT_INFO_2") 91 public String getMobile() {92 return mobile;93 }94 95 public void setMobile(String mobile) {96 this.mobile = mobile;97 }98 }
Dao
1 package daoUtil; 2 import org.hibernate.HibernateException; 3 import org.hibernate.Session; 4 import org.hibernate.SessionFactory; 5 import org.hibernate.Transaction; 6 import org.hibernate.cfg.Configuration; 7 import org.hibernate.service.ServiceRegistry; 8 import org.hibernate.service.ServiceRegistryBuilder; 9 10 public class HibernateUtil {11 12 private static final SessionFactory sessionFactory;13 14 static {15 try {16 Configuration cfg = new Configuration().configure();17 ServiceRegistry serviceRegistry = new ServiceRegistryBuilder()18 .applySettings(cfg.getProperties()).buildServiceRegistry();19 sessionFactory = cfg.buildSessionFactory(serviceRegistry);20 } catch (Throwable ex) {21 throw new ExceptionInInitializerError(ex);22 }23 }24 25 public static Session getSession() throws HibernateException {26 return sessionFactory.openSession();27 }28 29 public static Object save(Object obj){30 Session session = HibernateUtil.getSession();31 Transaction tx = null;32 try {33 tx = session.beginTransaction();34 session.save(obj);35 tx.commit();36 } catch (RuntimeException e) {37 if (tx != null) {38 tx.rollback();39 }40 throw e;41 } finally {42 session.close();43 }44 return obj;45 }46 47 public static void delete(Class clazz,String id){48 Session session = HibernateUtil.getSession();49 Transaction tx = null;50 try {51 tx = session.beginTransaction();52 Object obj = session.get(clazz,id);53 session.delete(obj);54 tx.commit();55 } catch (RuntimeException e) {56 if (tx != null) {57 tx.rollback();58 }59 throw e;60 } finally {61 session.close();62 }63 }64 }
main
1 package a6_SecondaryTable; 2 import java.util.Date; 3 import daoUtil.HibernateUtil; 4 5 public class Test_SecondaryTables { 6 7 public static void main(String[] args) { 8 9 Name name = new Name();10 CatSecondaryTables cat = new CatSecondaryTables();11 cat.setCat_name("test7SecondaryTables2");12 cat.setName(name);13 cat.setAddress("中华人民共和国");14 cat.setBirthday(new Date());15 cat.setGender(1);16 cat.setMobile("13012345678");17 18 HibernateUtil.save(cat);19 System.out.println(cat.getId());20 21 CatSecondaryTables cat1 = (CatSecondaryTables)HibernateUtil.getSession().get(CatSecondaryTables.class, cat.getId());22 System.out.println(cat1.getId());23 }24 }
环境:JDK1.6,MAVEN,tomcat,eclipse
源码地址:http://files.cnblogs.com/files/xiluhua/hibernate%40SecondaryTables.rar