目的是不写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();

最新文章

  1. WindowManager.LayoutParams 札记
  2. 在大于32GB或64GB容量的SD卡上使用NOOB安装树莓派 - Using NOOB on SD cards larger than 32GB or 64GB for Raspberry Pi
  3. java时间相减(转载)
  4. BLE-NRF51822教程16-BLE地址
  5. commonJS — 数组操作(for Array)
  6. 2016 ACM/ICPC 沈阳站 小结
  7. 关键路径(CriticalPath)算法
  8. JSP基本语法--包含指令&lt;%@include file=&quot;路径&quot;%&gt; &lt;jsp:include page&gt;
  9. mysql 1093错误
  10. POJ 3182 The Grove [DP(spfa) 射线法]
  11. url的解码方式
  12. okio:定义简短高效
  13. Chrome opacity非1时border-radius圆角边框剪裁问题
  14. 金融量化分析【day111】:Matplotib-绘制K线图
  15. git 本地推送远程仓库报错: error: failed to push some refs to &#39;https://github.com/yangtuothink/mxonline.git&#39;
  16. H5C303
  17. Hash table lengths and prime numbers
  18. chrome浏览器中的百度搜索引擎总是先自动跳转到百度首页怎么办?
  19. Linux显示不了中文
  20. Java实现冒泡排序,选择排序,插入排序

热门文章

  1. springcloud-Api网关服务Zuul
  2. [Codechef November Challenge 2012] Arithmetic Progressions
  3. 用js将一个数组合并到另一个数组中
  4. Codeforces Beta Round #61 (Div. 2) D. Petya and His Friends 想法
  5. python matrix/array反向切片
  6. bootstrap参考网站
  7. ActiveMQ 消息存储
  8. UGUI加载图片优化方法之一:打包成图集
  9. servlet cannot be resolved to a type解决办法
  10. AIM Tech Round 4 (Div. 2)ABCD