Hibernate,JPA注解@SecondaryTables
使用类一级的 @SecondaryTable或@SecondaryTables注解可以实现单个实体到多个表的映射. 使用 @Column或者 @JoinColumn注解中的table参数可指定某个列所属的特定表.
使用类一级的 @SecondaryTable或@SecondaryTables注解可以实现单个实体到多个表的映射. 使用 @Column或者 @JoinColumn注解中的table参数可指定某个列所属的特定表.
用例代码如下:
- 数据库DDL语句
1,CAT表
- create table CAT
- (
- id VARCHAR2(32 CHAR) not null,
- create_time TIMESTAMP(6),
- update_time TIMESTAMP(6),
- cat_name VARCHAR2(255 CHAR),
- first_name VARCHAR2(255 CHAR),
- last_name VARCHAR2(255 CHAR),
- version NUMBER(10) not null
- )
2,CAT_INFO表
- create table CAT_INFO
- (
- address VARCHAR2(255 CHAR),
- birthday TIMESTAMP(6),
- cat_id VARCHAR2(32 CHAR) not null
- )
3,CAT_INFO_2表
- create table CAT_INFO_2
- (
- gender NUMBER(10),
- mobile VARCHAR2(255 CHAR),
- cat_id VARCHAR2(32 CHAR) not null
- )
- hibernate.cfg.xml
- <?xml version="1.0" encoding="utf-8" ?>
- <!DOCTYPE hibernate-configuration
- PUBLIC "-//Hibernate/Hibernate Configuration DTD//EN"
- "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
- <hibernate-configuration>
- <session-factory>
- <!-- 数据库驱动配置 -->
- <property name="dialect">org.hibernate.dialect.Oracle10gDialect</property>
- <property name="connection.driver_class">oracle.jdbc.OracleDriver</property>
- <property name="connection.url">jdbc:oracle:thin:@127.0.0.1:1521:orcl</property>
- <property name="connection.username">wxuatuser</property>
- <property name="connection.password">xlh</property>
- <property name="show_sql">true</property>
- <!-- 自动执行DDL属性是update,不是true -->
- <property name="hbm2ddl.auto">update</property>
- <!-- hibernate实体类 -->
- <mapping class="a6_SecondaryTable.CatSecondaryTables"/>
- </session-factory>
- </hibernate-configuration>
- java类
实体类 - 基类
- package model;
- import java.io.Serializable;
- import java.util.Date;
- import javax.persistence.Column;
- import javax.persistence.GeneratedValue;
- import javax.persistence.Id;
- import javax.persistence.MappedSuperclass;
- import org.hibernate.annotations.GenericGenerator;
- /**
- * 实体类 - 基类
- */
- @MappedSuperclass
- public class BaseEntity implements Serializable {
- private static final long serialVersionUID = -6718838800112233445L;
- private String id;// ID
- private Date create_time;// 创建日期
- private Date update_time;// 修改日期
- @Id
- @Column(length = 32, nullable = true)
- @GeneratedValue(generator = "uuid")
- @GenericGenerator(name = "uuid", strategy = "uuid")
- public String getId() {
- return id;
- }
- public void setId(String id) {
- this.id = id;
- }
- @Column(updatable = false)
- public Date getCreate_time() {
- return create_time;
- }
- public void setCreate_time(Date create_time) {
- this.create_time = create_time;
- }
- public Date getUpdate_time() {
- return update_time;
- }
- public void setUpdate_time(Date update_time) {
- this.update_time = update_time;
- }
- @Override
- public int hashCode() {
- return id == null ? System.identityHashCode(this) : id.hashCode();
- }
- @Override
- public boolean equals(Object obj) {
- if (this == obj) {
- return true;
- }
- if (obj == null) {
- return false;
- }
- if (getClass().getPackage() != obj.getClass().getPackage()) {
- return false;
- }
- final BaseEntity other = (BaseEntity) obj;
- if (id == null) {
- if (other.getId() != null) {
- return false;
- }
- } else if (!id.equals(other.getId())) {
- return false;
- }
- return true;
- }
- }
实体类
- package a6_SecondaryTable;
- import java.util.Date;
- import javax.persistence.AttributeOverride;
- import javax.persistence.AttributeOverrides;
- import javax.persistence.Column;
- import javax.persistence.Embedded;
- import javax.persistence.Entity;
- import javax.persistence.PrimaryKeyJoinColumn;
- import javax.persistence.SecondaryTable;
- import javax.persistence.SecondaryTables;
- import javax.persistence.Table;
- import javax.persistence.Version;
- import model.BaseEntity;
- import org.hibernate.annotations.DynamicInsert;
- import org.hibernate.annotations.DynamicUpdate;
- @Entity
- @DynamicInsert
- @DynamicUpdate
- @Table(name="CAT")
- @SecondaryTables( value = {
- @SecondaryTable(name="CAT_INFO",pkJoinColumns=@PrimaryKeyJoinColumn(name="CAT_ID")),
- @SecondaryTable(name="CAT_INFO_2",pkJoinColumns=@PrimaryKeyJoinColumn(name="CAT_ID")) })
- public class CatSecondaryTables extends BaseEntity{
- /**
- * 实体类
- */
- private static final long serialVersionUID = -2776330321385582872L;
- private String cat_name;
- private Name name;
- private int version;
- private String address;
- private Date birthday;
- private Integer gender;
- private String mobile;
- @Version
- public int getVersion() {
- return version;
- }
- public void setVersion(int version) {
- this.version = version;
- }
- public String getCat_name() {
- return cat_name;
- }
- public void setCat_name(String cat_name) {
- this.cat_name = cat_name;
- }
- @Embedded
- @AttributeOverrides({
- @AttributeOverride(name = "first_name", column = @Column(name = "first_name")),
- @AttributeOverride(name = "last_name", column = @Column(name = "last_name")) })
- public Name getName() {
- return name;
- }
- public void setName(Name name) {
- this.name = name;
- }
- @Column(name="ADDRESS", table="CAT_INFO")
- public String getAddress() {
- return address;
- }
- public void setAddress(String address) {
- this.address = address;
- }
- @Column(name="BIRTHDAY", table="CAT_INFO")
- public Date getBirthday() {
- return birthday;
- }
- public void setBirthday(Date birthday) {
- this.birthday = birthday;
- }
- @Column(name="GENDER", table="CAT_INFO_2")
- public Integer getGender() {
- return gender;
- }
- public void setGender(Integer gender) {
- this.gender = gender;
- }
- @Column(name="MOBILE", table="CAT_INFO_2")
- public String getMobile() {
- return mobile;
- }
- public void setMobile(String mobile) {
- this.mobile = mobile;
- }
- }
Dao
- package daoUtil;
- import org.hibernate.HibernateException;
- import org.hibernate.Session;
- import org.hibernate.SessionFactory;
- import org.hibernate.Transaction;
- import org.hibernate.cfg.Configuration;
- import org.hibernate.service.ServiceRegistry;
- import org.hibernate.service.ServiceRegistryBuilder;
- public class HibernateUtil {
- private static final SessionFactory sessionFactory;
- static {
- try {
- Configuration cfg = new Configuration().configure();
- ServiceRegistry serviceRegistry = new ServiceRegistryBuilder()
- .applySettings(cfg.getProperties()).buildServiceRegistry();
- sessionFactory = cfg.buildSessionFactory(serviceRegistry);
- } catch (Throwable ex) {
- throw new ExceptionInInitializerError(ex);
- }
- }
- public static Session getSession() throws HibernateException {
- return sessionFactory.openSession();
- }
- public static Object save(Object obj){
- Session session = HibernateUtil.getSession();
- Transaction tx = null;
- try {
- tx = session.beginTransaction();
- session.save(obj);
- tx.commit();
- } catch (RuntimeException e) {
- if (tx != null) {
- tx.rollback();
- }
- throw e;
- } finally {
- session.close();
- }
- return obj;
- }
- public static void delete(Class<?> clazz,String id){
- Session session = HibernateUtil.getSession();
- Transaction tx = null;
- try {
- tx = session.beginTransaction();
- Object obj = session.get(clazz,id);
- session.delete(obj);
- tx.commit();
- } catch (RuntimeException e) {
- if (tx != null) {
- tx.rollback();
- }
- throw e;
- } finally {
- session.close();
- }
- }
- }
main
- package a6_SecondaryTable;
- import java.util.Date;
- import daoUtil.HibernateUtil;
- public class Test_SecondaryTables {
- public static void main(String[] args) {
- Name name = new Name();
- CatSecondaryTables cat = new CatSecondaryTables();
- cat.setCat_name("test7SecondaryTables2");
- cat.setName(name);
- cat.setAddress("中华人民共和国");
- cat.setBirthday(new Date());
- cat.setGender(1);
- cat.setMobile("13012345678");
- HibernateUtil.save(cat);
- System.out.println(cat.getId());
- CatSecondaryTables cat1 = (CatSecondaryTables)HibernateUtil.getSession().get(CatSecondaryTables.class, cat.getId());
- System.out.println(cat1.getId());
- }
- }
环境:JDK1.6,MAVEN,tomcat,eclipse
源码地址:http://files.cnblogs.com/files/xiluhua/hibernate%40SecondaryTables.rar
Hibernate,JPA注解@SecondaryTables的更多相关文章
- Java、Hibernate(JPA)注解大全
1.@Entity(name=”EntityName”) 必须,name为可选,对应数据库中一的个表 2.@Table(name=””,catalog=””,schema=””) 可选,通常和@Ent ...
- JPA注解@SecondaryTables 实现一个实体映射多张数据库表
参考:http://jingpin.jikexueyuan.com/article/46978.html Annotation Type SecondaryTables(参考:https://docs ...
- hibernate jpa 注解 @Temporal(TemporalType.DATE) 格式化时间日期,页面直接得到格式化类型的值
1.日期: @Temporal(TemporalType.DATE) @Column(name = "applyDate", nullable = false, length = ...
- 【hibernate/JPA】注解方式实现 复合主键【spring boot】
1>hibernate/JPA实现复合主键的思路:是将所有的主键属性封装在一个主键类中,提供给需要复合主键的实体类使用. 2>主键类的几点要求: . 使用复合主键的实体类必须实现Seria ...
- hibernate自带的注解和jpa注解的冠希
hibernate是实现了JPA规范,在我们使用hibernate框架的时候,我们引入了hibernate3或者4这个核心包.hibernate-jpa-2.0-api-1.0.0.Final.jar ...
- Hibernate 和 JPA 注解
转载请注明:Hibernate 和 JPA 注解 | 言曌博客 1.@Entity(name="EntityName") 必须, name为可选,对应数据库中一的个表 2.@Tab ...
- jpa 注解使用说明
1.@Entity(name="EntityName") 必须,name为可选,对应数据库中一的个表 2.@Table(name="",catalog=&quo ...
- Hibernate基于注解方式配置来实现实体和数据库之间存在某种映射关系
实体和数据库之间存在某种映射关系,hibernate根据这种映射关系完成数据的存取.在程序中这种映射关系由映射文件(*.hbm.xml)或者java注解(@)定义. 本文以java注解的形式总结映射关 ...
- Hibernate+JPA (EntityMange讲解)
近年来ORM(Object-Relational Mapping)对象关系映射,即实体对象和数据库表的映射)技术市场人声音鼎沸,异常热闹, Sun在充分吸收现有的优秀ORM框架设计思想的基础上,制定了 ...
随机推荐
- nginx的内存管理
先来看内存池的实现,nginx的内存池实现的非常简单. 这里内存池的一些图表可以看老朱同学的slides : http://blog.zhuzhaoyuan.com/2009/09/nginx-int ...
- 关于开源授权协议 GPL 和 LGPL
GPL 是 GNU General Public License (GNU 通用公共许可证)的缩写形式:LGPL 是 GNU Lesser General Public License (GNU 宽通 ...
- SWIFT 闭包的简单使用二
import UIKit @UIApplicationMain class AppDelegate: UIResponder, UIApplicationDelegate { var window: ...
- Android中的Handler机制
直接在UI线程中开启子线程来更新TextView显示的内容,运行程序我们会发现,如下错 误:android.view.ViewRoot$CalledFromWrongThreadException: ...
- 常用<meta>标签
页面关键词 <meta name="keywords" content="your tags" /> 页面描述 <meta name=&quo ...
- mongodb远程连接以及备份、还原、导出、导入
一.远程连接mongodb 连接命令:mongo -u username -p pwd 192.168.41.215:27017/database(用户名对应的数据库) 二.mongodump备份数据 ...
- [转]MySQL数据库引擎
经常用MySQL数据库,但是,你在用的时候注意过没有,数据库的存储引擎,可能有注意但是并不清楚什么意思,可能根本没注意过这个问题,使用了默认的数据库引擎,当然我之前属于后者,后来成了前者,然后就有了这 ...
- Java基础(54):java四种内部类详解(转)
一般来说,有4中内部类:常规内部类.静态内部类.局部内部类.匿名内部类. 一.常规内部类:常规内部类没有用static修饰且定义在在外部类类体中. 1.常规内部类中的方法可以直接使用外部类的实例变量 ...
- android开发之如何使TabHost的TabWidget位于屏幕下方
更改TabHost里的第一个LinearLayout为RelativeLayout.并在TabWidget中添加android:layout_alignParentBottom="true& ...
- ZOJ 3645 BiliBili(高斯消元)
Shirai Kuroko is a Senior One student. Almost everyone in Academy City have super powers, and Kuroko ...