hibernate mysql 注解主健_Hibernate,JPA注解@PrimaryKeyJoinColumn

一对一(One-to-one),主键关联

用例代码如下:

数据库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

)

hibernate.cfg.xml

/p>

PUBLIC "-//Hibernate/Hibernate Configuration DTD//EN"

"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">

org.hibernate.dialect.Oracle10gDialect

oracle.jdbc.OracleDriver

jdbc:oracle:thin:@127.0.0.1:1521:orcl

wxuatuser

xlh

true

update

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;

}

}

实体类

Cat.java

package a8_OneToOne_PrimaryKeyJoinColumn;

import javax.persistence.AttributeOverride;

import javax.persistence.AttributeOverrides;

import javax.persistence.CascadeType;

import javax.persistence.Column;

import javax.persistence.Embedded;

import javax.persistence.Entity;

import javax.persistence.OneToOne;

import javax.persistence.PrimaryKeyJoinColumn;

import javax.persistence.Version;

import model.BaseEntity;

import org.hibernate.annotations.DynamicInsert;

import org.hibernate.annotations.DynamicUpdate;

@Entity

@DynamicInsert

@DynamicUpdate

public class Cat extends BaseEntity{

/**

* 实体类

*/

private static final long serialVersionUID = -2776330321385582872L;

private Cat_Info cat_Info;

private String cat_name;

private Name name;

private int version;

@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;

}

/*

* mappedBy属性:

* 如果关系是单向的,则该关联提供程序确定拥有该关系的字段。

* 如果关系是双向的,则将关联相反(非拥有)方上的 mappedBy 元素设置为拥

* 有此关系的字段或属性的名称

*/

@OneToOne(cascade = CascadeType.ALL,mappedBy="cat")

@PrimaryKeyJoinColumn

public Cat_Info getCat_Info() {

return cat_Info;

}

public void setCat_Info(Cat_Info cat_Info) {

this.cat_Info = cat_Info;

}

}

Cat_Info.java

package a8_OneToOne_PrimaryKeyJoinColumn;

import java.io.Serializable;

import java.util.Date;

import javax.persistence.Entity;

import javax.persistence.GeneratedValue;

import javax.persistence.Id;

import javax.persistence.OneToOne;

import org.hibernate.annotations.GenericGenerator;

import org.hibernate.annotations.Parameter;

@Entity

public class Cat_Info implements Serializable{

/**

* 实体类

*/

private static final long serialVersionUID = 8258082211095664606L;

private Cat cat;

private String address;

private Date birthday;

public String getAddress() {

return address;

}

public void setAddress(String address) {

this.address = address;

}

public Date getBirthday() {

return birthday;

}

public void setBirthday(Date birthday) {

this.birthday = birthday;

}

@OneToOne

@Id

@GeneratedValue(generator = "pkGenerator")

@GenericGenerator(

name = "pkGenerator",

strategy = "foreign",

parameters = @Parameter(name = "property", value = "cat")

)

public Cat getCat() {

return cat;

}

public void setCat(Cat cat) {

this.cat = cat;

}

}

组件类

package a8_OneToOne_PrimaryKeyJoinColumn;

import java.io.Serializable;

import javax.persistence.Embeddable;

@Embeddable

public class Name implements Serializable {

/**

* 嵌入式组建

*/

private static final long serialVersionUID = -2776330321385582872L;

private String first_name;

private String last_name;

public String getFirst_name() {

return first_name;

}

public void setFirst_name(String first_name) {

this.first_name = first_name;

}

public String getLast_name() {

return last_name;

}

public void setLast_name(String last_name) {

this.last_name = last_name;

}

}

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 a8_OneToOne_PrimaryKeyJoinColumn;

import java.util.Date;

import daoUtil.HibernateUtil;

public class Test_OneToOne_PrimaryKeyJoinColumn {

private Cat save(){

Cat_Info info = new Cat_Info();

info.setAddress("201503281");

info.setBirthday(new Date());

Cat cat = new Cat();

cat.setCat_name("a8_OneToOne_PrimaryKeyJoinColumn");

cat.setName(new Name());

cat.setCat_Info(info);

info.setCat(cat);

HibernateUtil.save(cat);

System.out.println(cat.getId());

return cat;

}

public static void main(String[] args) {

Cat cat = new Test_OneToOne_PrimaryKeyJoinColumn().save();

Cat cat1 = (Cat)HibernateUtil.getSession().get(Cat.class, cat.getId());

System.out.println(cat1.getId());

}

}

环境:JDK1.6,MAVEN,tomcat,eclipse

源码地址:http://files.cnblogs.com/files/xiluhua/hibernate%40PrimaryKeyJoinColumn.rar

Java、Hibernate(JPA)注解大全

1.@Entity(name=”EntityName”) 必须,name为可选,对应数据库中一的个表 2.@Table(name=””,catalog=””,schema=””) 可选,通常和@Ent ...

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框架设计思想的基础上,制定了 ...

spring+hibernate+jpa+Druid的配置文件,spring整合Druid

spring+hibernate+jpa+Druid的配置文件 spring+hibernate+jpa+Druid的完整配置 spring+hibernate+jpa+Druid的数据源配置 spr ...

随机推荐

Eclipse使用svn文章列表

http://www.cnblogs.com/duanxz/p/3334660.html http://www.cnblogs.com/duanxz/p/3334660.html http://130 ...

JAVA内存机制

Java程序运行时,数据会分区存放,JavaStack(Java栈). heap(堆).method(方法区). 一.JVM内存模型 1.Java栈Java栈的区域很小,只有1M,特点是存取速度很快, ...

hadoop中NameNode、DataNode和Client三者之间协作关系及通信方式介绍

1)NameNode.DataNode和Client         NameNode可以看作是分布式文件系统中的管理者,主要负责管理文件系统的命名空间.集群 ...

php,Allowed memory size of 8388608 bytes exhausted (tried to allocate 1298358 bytes)

修改apache上传文件大小限制 PHP上传文件大小限制解决方法: 第一: 在php.ini里面查看如下行: upload_max_filesize = 8M    post_max_size = 1 ...

MYSQL: Cannot delete or update a parent row: a foreign key constraint fails

这可能是MySQL在InnoDB中设置了foreign key关联,造成无法更新或删除数据.可以通过设置FOREIGN_KEY_CHECKS变量来避免这种情况. SET FOREIGN_KEY_CHE ...

前端利器,如何使用fiddle拦截在线css进行先下调试

fiddle的功能相当的强悍,用户也非常广,不过今天我就教大家用fiddle进行前端调试. 首先下载软件fiddle,点击对应的版本下载安装. 安装成功后打开看到右侧的导航栏: 点击AutoRespo ...

《Linux内核设计与实现》第三章学习笔记

第三章  进程管理 姓名:王玮怡  学号:20135116 一.进程 1.进程的含义 进程是处于执行期的程序以及相关资源的总称,程序本身并不是进程,实际上就是正在执行的代码的实时结果.Linux内核通 ...

c 链表之 快慢指针 查找循环节点

参考:http://blog.youkuaiyun.com/wenqian1991/article/details/17452715 上面分析了 根据这张图 推倒出 数学公式. 刚接触 不能一下弄明白.下面结合上 ...

使用 nw-builder 构建跨平台桌面应用程序

NW.js 是一个使用 Web 技术创建本地应用的框架,如 HTML.JavaScript 和 CSS.简单地说,当你在使用普通的流程开发一个 Web 应用时,开发完成后,运行一个生成器,将所有东西编 ...

Android深入理解Context(二)Activity和Service的Context创建过程

前言 上一篇文章我们学习了Context关联类和Application Context的创建过程,这一篇我们接着来学习Activity和Service的Context创建过程.需要注意的是,本篇的知识 ...

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值