hibernate Annotation 以及注解版的数据关联 4.4
目的是不写xxx.hbm.xml映射文件,使用注解
主配置文件还是要有hibernate.cfg.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration> <session-factory> <property name="connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="connection.url">jdbc:mysql:///hibernate</property>
<property name="connection.username">root</property>
<property name="connection.password">root</property> <!-- 方言 -->
<property name="dialect">org.hibernate.dialect.MySQLDialect</property> <!-- c3p0数据源 -->
<property name="c3p0.max_size">10</property>
<property name="c3p0.min_size">2</property>
<property name="c3p0.timeout">5000</property>
<property name="c3p0.max_statements">100</property>
<property name="c3p0.idle_test_period">3000</property>
<property name="c3p0.acquire_increment">2</property>
<property name="c3p0.validate">false</property> <property name="show_sql">true</property>
<property name="current_session_context_class">thread</property> <!-- 开启二级缓存 使用EhCache实现-->
<property name="cache.region.factory_class">org.hibernate.cache.ehcache.EhCacheRegionFactory</property> <!-- 不同的是这里,不写映射文件,而是完全限定名 -->
<mapping class="com.kaishengit.pojo.User"/>
<mapping class="com.kaishengit.pojo.Address"/>
<mapping class="com.kaishengit.pojo.Teacher"/>
<mapping class="com.kaishengit.pojo.Student"/>
<mapping class="com.kaishengit.pojo.Employee"/>
<mapping class="com.kaishengit.pojo.Dept"/>
<mapping class="com.kaishengit.pojo.Person"/>
<mapping class="com.kaishengit.pojo.Card"/>
<mapping class="com.kaishengit.pojo.Account"/>
<!--
<mapping resource="com/kaishengit/pojo/User.hbm.xml"/>
<mapping resource="com/kaishengit/pojo/Address.hbm.xml"/>
<mapping resource="com/kaishengit/pojo/Person.hbm.xml"/>
<mapping resource="com/kaishengit/pojo/Card.hbm.xml"/>
<mapping resource="com/kaishengit/pojo/Employee.hbm.xml"/>
<mapping resource="com/kaishengit/pojo/Dept.hbm.xml"/>
<mapping resource="com/kaishengit/pojo/Student.hbm.xml"/>
<mapping resource="com/kaishengit/pojo/Teacher.hbm.xml"/>
-->
</session-factory> </hibernate-configuration>
-------------------------------------------------------------------
-------------------------------------------------------------------
一对多,多对一 记得添加到主配置文件中去
取而代之的是在类上注解
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.OneToMany;
import javax.persistence.OrderBy;
import javax.persistence.Table;
import org.hibernate.annotations.Cache;
import org.hibernate.annotations.CacheConcurrencyStrategy;
@Entity// 表示这是一个pojo类
@Table(name="user")// 与数据库中表对应,表名和类名相同的可以不写
@Cache(usage=CacheConcurrencyStrategy.READ_WRITE)/*加入缓存 */
public class User { @Id/*放在这个属性上,表示这个属性在数据库中是主键,如果属性的名字和数据库中的
主键不一样,要加注解@column(name="id")*/
//@column(name="id")
@GeneratedValue(strategy=GenerationType.IDENTITY)/* 主键生成策略*/
private Integer id; /*普通属性不用管,自动映射,但是如果列名和属性名不一样要加column */
//@Column(name="username")
private String username;
private String password;
/* 多的一方维护关系,user不用管,mappedBy="user"(user是自己在对方类中属性的名字)相当于inverse,放弃关系维护 */
@OneToMany(mappedBy="user")
@Cache(usage=CacheConcurrencyStrategy.READ_WRITE)// 加入缓存
@OrderBy("id desc")//排序
private Set<Address> addressSet;
}
@Entity
@Table
@Cache(usage=CacheConcurrencyStrategy.READ_WRITE)/* 加入缓存 */
public class Address { @Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Integer id;
private String address;
@ManyToOne//多对一
@JoinColumn(name="userid")//指定外键
private User user;
}
---------------------------------------------------------------
---------------------------------------------------------------
---------------------------------------------------------------
多对多 ,记得添加到主配置文件中去
@Entity
@Table
@Cache(usage=CacheConcurrencyStrategy.READ_WRITE)
public class Student { @Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Integer id;
private String name; @ManyToMany /*自己在关系表中的外键*/ /* 对方在关系表中的外键*/
@JoinTable(name="student_teacher",joinColumns={@JoinColumn(name="sid")},inverseJoinColumns={@JoinColumn(name="tid")})
private Set<Teacher> teachers; }
@Entity
@Table
@Cache(usage=CacheConcurrencyStrategy.READ_WRITE)
public class Teacher { @Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Integer id;
private String name;
@ManyToMany(mappedBy="teachers")//放弃维护
@OrderBy("id desc")
@Cache(usage=CacheConcurrencyStrategy.READ_WRITE)
private Set<Student> students; }
--------------------------------------------------------
--------------------------------------------------------
一对一
第一种一对一
person和card,card的id即作为主键,又作为外键
@Entity
@Table
public class Person { @Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Integer id;
private String name; @OneToOne
@PrimaryKeyJoinColumn/*告诉card,主键是靠着我(person) 产生的 */
private Card card;
@Entity
@Table
public class Card {
/* JPA中的主键生成策略只有四种,不支持外键生成器 所以写一个生成器GenericGenerator,名字叫FK
生成策略叫foreign,
这个person是属性,指明用card这个类的person属性对应的表的主键作外键*/
@Id
@GenericGenerator(name="FK",strategy="foreign",parameters={@Parameter(name="property",value="person")})
@GeneratedValue(generator="FK")// 指定多用的生成器
private Integer id;
private String cardnum; @OneToOne(mappedBy="card")
@PrimaryKeyJoinColumn
private Person person;
第二种一对一,是一对多或者多对一的特殊情况
dept和Employee,dept中有eid,Employee中有deptid
@Entity
@Table
public class Employee { @Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Integer id;
private String name;
@ManyToOne
@JoinColumn(name="deptid")
private Dept dept;
}
@Entity
@Table
public class Dept { @Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Integer id;
private String name;
@ManyToOne
@JoinColumn(name="eid")
private Employee employee; }
----------------------------------------------------------
-------------------------------------------------------
-----------------------------------------------------
id不想用自动增长型,想用UUID怎么设置主键生成策略?
@Entity
@Table
public class Account { private String id;
private String name; @Id
@GenericGenerator(name="myuuid",strategy="uuid")
@GeneratedValue(generator="myuuid")
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
} // 排除不进行持久化操作的属性
@Transient
public String getNickName() {
return "Hello,Jack";
} }
程序执行.不用生成UUID,只需要保存
session.beginTransaction(); Account account = new Account();
account.setName("hello"); session.save(account); session.getTransaction().commit();
hibernate Annotation 以及注解版的数据关联 4.4的更多相关文章
- hibernate Annotation 以及注解版的数据关联
目的是不写xxx.hbm.xml映射文件,使用注解 主配置文件还是要有hibernate.cfg.xml <?xml version="1.0" encoding=" ...
- Rhythmk 学习 Hibernate 07 - Hibernate annotation 实体注解
参考: http://docs.jboss.org/hibernate/annotations/3.4/reference/zh_cn/html_single/ 1.系统配置: 可以通过使用 map ...
- hibernate annotation 之 注解声明
@Entity 将一个 POJO 类注解成一个实体 bean ( 持久化 POJO 类 ) @Table 为实体 bean 映射指定具体的表,如果该注解没有被声明,系统将使用默认值 ( 即实体 bea ...
- 转Hibernate Annotation mappedBy注解理解
在Annotation 中有这么一个@mappedBy 属性注解,相信有些同学还是对这个属性有些迷惑,上网找了些理解@mappedBy比较深刻的资料,下面贴出来供大家参考. http://xiaoru ...
- Rhythmk 学习 Hibernate 08 - Hibernate annotation 关联关系注解
1.一对一 (One to One) 共三种情况: 1.1 主键共享 1.2 外键共享 1.3 中间表关联 1.1 code: @Entity public class arti ...
- Java进阶知识10 Hibernate一对多_多对一双向关联(Annotation+XML实现)
本文知识点(目录): 1.Annotation 注解版(只是测试建表) 2.XML版 的实现(只是测试建表) 3.附录(Annotation 注解版CRUD操作)[注解版有个问题:插入值时 ...
- hibernate annotation注解方式来处理映射关系
在hibernate中,通常配置对象关系映射关系有两种,一种是基于xml的方式,另一种是基于annotation的注解方式,熟话说,萝卜青菜,可有所爱,每个人都有自己喜欢的配置方式,我在试了这两种方式 ...
- struts2+hibernate+spring注解版框架搭建以及简单测试(方便脑补)
为了之后学习的日子里加深对框架的理解和使用,这里将搭建步奏简单写一下,目的主要是方便以后自己回来脑补: 1:File--->New--->Other--->Maven--->M ...
- Hibernate Annotation (Hibernate 注解)
简介: 传统上,Hibernate的配置依赖于外部 XML 文件:数据库映射被定义为一组 XML 映射文件,并且在启动时进行加载. 然而现在借助新的 Hibernate Annotation 库, ...
随机推荐
- java类的封装、继承、多态
一.封装(encapsulation) 封装性就是把类(对象)的属性和行为结合成一个独立的相同单位,并尽可能隐蔽类(对象)的内部细节,对外形成一个边界,只保留有限的对外接口使之与外部发生联系.封装的特 ...
- ZOJ 1698 (最大流入门)
Power NetworkTime Limit:5000MS Memory Limit:32768KB 64bit IO Format:%lld & %llu SubmitStat ...
- 保存android程序崩溃日志到SD卡
private boolean writeToSDCard(Throwable ex) { boolean isDealing = false; if (Environment.getExternal ...
- Docker之dockerfile
一.什么是dockerfile Docker通过对于在dockerfile中的一系列指令的顺序解析实现自动的Image的构建: 通过使用build命令,根据dockerfile的描述来构建镜像: bu ...
- ios 设备用jquery live绑定 click 事件不管用
问题描述:用js拼接的html追加到页面,然后用 live 绑定click事件不起作用 解决办法:1.直接在标签写onclick事件 2.给需要绑定的标签添加css样式{cursor:pointe ...
- hough变换是如何检测出直线和圆的?
(I)直线篇 1 直线是如何表示的?对于平面中的一条直线,在笛卡尔坐标系中,常见的有点斜式,两点式两种表示方法.然而在hough变换中,考虑的是另外一种表示方式:使用(r,theta)来表示一条直线. ...
- sql表连接的几种方式
这里有两张表TableA和TableB,分别是姓名表和年龄表,用于我们例子的测试数据 TableA id name 1 t1 2 t2 4 t4 TableB id age 1 18 2 20 3 1 ...
- JSP 和 Servlet 有哪些相同点和不同点, 他们之间的联系是什么?
jsp和servlet的区别和联系:1.jsp经编译后就变成了Servlet.(JSP的本质就是Servlet,JVM只能识别java的类,不能识别JSP的代码,Web容器将JSP的代码编译成JVM能 ...
- JavaSE复习日记 : 八种基本数据类型
/* * 基本数据类型 * * Java里的8种基本数据类型: * byte --- 1 byte = 8 bit; * short --- 2 byte = 16 bit; * int --- 4 ...
- JZOI
orz..kpm大神做的JZOI卡.很好看 目前是全球限量十张哈哈哈 (正面) (背面) 原图: