目的是不写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. 阻止长按复制页面中的内容;zepto中touch中的应用必须先加载event模块之后;

    <!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  2. Tempter of the Bone(dfs奇偶剪枝)

    Tempter of the Bone Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Othe ...

  3. 用户向导页面实现左右滑动的ViewPager

    然后在一个博客,以前的博客ImageSwitcher实现用户向导,现在,随着ViewPager实现同样的功能.直接看代码: 布局文件activity_main.xml <RelativeLayo ...

  4. java String分类trim,substring,replaceAll,indexOf使用功能

    1.trim性能 特征去掉字符串首尾空格,防止不必要的空格导致错误. public class TrimTest { public static void main(String[] args) { ...

  5. 简单的web三层架构系统【第一版】

    SQLhelper助手类编写: 1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using Sys ...

  6. JavaScript基础(语法类型转换、运算符、语句)

    1.类型转换: 分为自动转换和强制转换,一般用强制转换. 其他类型转换为整数:parseint(): 其他类型转换为小数:parsefloat(): 判断是否是一个合法的数字类型:isNaN(): 是 ...

  7. 我的iOS学习之路(四):动画设置

    在ios的开发过程中,经常需要对视图控件进行变化,如大小,颜色,旋转等,这是如果直接将变化结果呈现出来,就显得不够友好,所以我们通常会使用动画,让用户能够看到变化的过程. 使用动画通常有两种方式,一种 ...

  8. webservice主流框架Axis、Axis2、XFire、CXF的比较

    http://ws.apache.org/axis/ http://axis.apache.org/axis2/java/core/ http://xfire.codehaus.org/ http:/ ...

  9. NSFileManager的应用

    单例,是在 一个文件中只创建一次就能够全部一起共享,多创建的地址是相同的 NSFileManager *manager=[NSFileManager defaultManager]; 是一个单例   ...

  10. 在Attribute Inspector 上显示自定义的控件的属性

    FirstColor 跟 CornerRadious 都是新增的显示属性具体实现方法如下: @property(nonatomic,weak)IBInspectable UIColor *firstC ...