目的是不写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的更多相关文章

  1. hibernate Annotation 以及注解版的数据关联

    目的是不写xxx.hbm.xml映射文件,使用注解 主配置文件还是要有hibernate.cfg.xml <?xml version="1.0" encoding=" ...

  2. Rhythmk 学习 Hibernate 07 - Hibernate annotation 实体注解

    参考: http://docs.jboss.org/hibernate/annotations/3.4/reference/zh_cn/html_single/ 1.系统配置: 可以通过使用  map ...

  3. hibernate annotation 之 注解声明

    @Entity 将一个 POJO 类注解成一个实体 bean ( 持久化 POJO 类 ) @Table 为实体 bean 映射指定具体的表,如果该注解没有被声明,系统将使用默认值 ( 即实体 bea ...

  4. 转Hibernate Annotation mappedBy注解理解

    在Annotation 中有这么一个@mappedBy 属性注解,相信有些同学还是对这个属性有些迷惑,上网找了些理解@mappedBy比较深刻的资料,下面贴出来供大家参考. http://xiaoru ...

  5. Rhythmk 学习 Hibernate 08 - Hibernate annotation 关联关系注解

    1.一对一 (One to One)    共三种情况:     1.1 主键共享    1.2 外键共享 1.3 中间表关联 1.1  code: @Entity public class arti ...

  6. Java进阶知识10 Hibernate一对多_多对一双向关联(Annotation+XML实现)

    本文知识点(目录): 1.Annotation 注解版(只是测试建表)    2.XML版 的实现(只是测试建表)    3.附录(Annotation 注解版CRUD操作)[注解版有个问题:插入值时 ...

  7. hibernate annotation注解方式来处理映射关系

    在hibernate中,通常配置对象关系映射关系有两种,一种是基于xml的方式,另一种是基于annotation的注解方式,熟话说,萝卜青菜,可有所爱,每个人都有自己喜欢的配置方式,我在试了这两种方式 ...

  8. struts2+hibernate+spring注解版框架搭建以及简单测试(方便脑补)

    为了之后学习的日子里加深对框架的理解和使用,这里将搭建步奏简单写一下,目的主要是方便以后自己回来脑补: 1:File--->New--->Other--->Maven--->M ...

  9. Hibernate Annotation (Hibernate 注解)

    简介: 传统上,Hibernate的配置依赖于外部 XML 文件:数据库映射被定义为一组 XML 映射文件,并且在启动时进行加载. 然而现在借助新的 Hibernate   Annotation 库, ...

随机推荐

  1. Win7搭建Django开发环境

    1.官网下载并安装python 2.7.5 2.配置python 环境变量 在Path中加入python安装目录: PATH=PATH;c:\python26 在PATHEXT中加入以下变量,可以直接 ...

  2. 【Android界面实现】使用Canvas对象实现“刮刮乐”效果

    在淘宝.京东等电商举办活动的时候,常常能够看到在移动client推出的各种刮奖活动,而这样的活动也受到了非常多人的喜爱.从client的体验来说,这样的效果应该是通过网页来实现的,那么,我们使用And ...

  3. 交换机VLAN研究

    这两天在研究openWRT的网络接口问题,涉及到了交换机的一些概念,主要是跟VLAN相关的,在此总结一下. VLAN在802.11Q中定义,802.11Q帧格式如下图所示: 交换机示意图如下图所示: ...

  4. POJ 3623 Best Cow Line, Gold(字符串处理)

    题意:给你一个字符串,让你重新排列,只能从头或者尾部取出一个放到新字符串队列的最后.按照字典序. 解决方法:比较前后两个的大小,谁小输出谁,相等,就往当中比来确定当前应该拿最前面的还是最后面的,如果再 ...

  5. JAVA处理XML

    <xml>  <ToUserName><![CDATA[toUser]]></ToUserName>  <FromUserName>< ...

  6. POJ 3376 Finding Palindromes(扩展kmp+trie)

    题目链接:http://poj.org/problem?id=3376 题意:给你n个字符串m1.m2.m3...mn 求S = mimj(1=<i,j<=n)是回文串的数量 思路:我们考 ...

  7. JavaScript 运动框架 Step by step

    http://blog.csdn.net/rsj217/article/details/7986905 关于offsetLeft:http://www.cnblogs.com/JackJiang/ar ...

  8. (Problem 74)Digit factorial chains

    The number 145 is well known for the property that the sum of the factorial of its digits is equal t ...

  9. 【转】使用Boost Graph library(二)

    原文转自:http://shanzhizi.blog.51cto.com/5066308/942972 让我们从一个新的图的开始,定义一些属性,然后加入一些带属性的顶点和边.我们将给出所有的代码,这样 ...

  10. 射频识别技术漫谈(23)——ISO15693的载波、调制与编码

    射频识别技术中的通讯大多是主从式,主动方一般是读写器,被动方称为“卡片”或“标签”.到底是叫“卡片”还是“标签”,好像也没有严格的区分.习惯上可以从以下4个方面界定:一是形状,卡片通常体积较大,更像“ ...