hibernate实现JPA规范配置
2021-06-15 00:05
标签:target 编号 数据 一对多 -o 字段名 级别 null string JAP(java Persistence API)sun公司推出一套基于ORM的规范 LinkMan: 操作 Hibernate中的方法 JPA中的方法 说明 保存操作 save(Object entity) persist(Object entity) 共同点:都是把临时态对象转成了持久态。 区别: 提供者不一样: save方法是hibernate提供的。 persist方法是JPA规范提供的。 在没有事务的情况下: save会去数据库中保存,hibernate提供了一个内置的事务来执行。 persist什么都不会做。 更新操作 update (Object entity) merge (Object entity) Hibernate和jpa都可以利用快照机制,不调用任何方法去更新。 Update方法在更新时,如果遇到一级缓存已经包含了一个相同OID的对象会报错。merge则可以执行成功。 删除操作 delete (Object entity) remove (Object entity) 都是删除一个实体 查询一个操作 get (Class clazz,Serializable id) load(Class clazz,Serializable id) find(Class clazz,Object id) getReerence(Class clazz,Object id) get和find都是立即加载。load和getReference一样都是延迟加载。 查询所有操作 Query:使用HQL语句查询 Query:使用JPQL查询 查询语句的形式不一样。 查询返回唯一结果操作 uniqueResult() getSingleResult() 查询都是返回一个唯一的结果。 hibernate实现JPA规范配置 标签:target 编号 数据 一对多 -o 字段名 级别 null string 原文地址:http://www.cnblogs.com/zjqblog/p/7277294.html
hibernate实现了这套规范
hibernate有自己独立的ORM操作数据库方式,也有JPA规范实现的操作数据库方式
jar包是:hibernate-entitymanager-5.0.7.Final.jar
在src下创建META-INF文件夹下创建一个名称为persistence.xml的文件
persistence.xml:
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence
http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"
version="2.0">
约束的声明可在hibernate-entitymanager-5.0.7.Final.jar--org.hibernate.jpa--persistence_2_0.xsd(中第24行到26行)
(一对多的关系配置案例:)
Customer:
// ps: 所有jpa的注解都在 javax.persistence包下
@Entity
@Table(name="cst_customer")
public class Customer
{
@Id
@Column(name="cust_id")
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Long cust_id; // ‘客户编号(主键)‘, 0 null
@Column(name="cust_name")
private String cust_name; // ‘客户名称(公司名称)‘,
@Column(name="cust_source")
private String cust_source; // ‘客户信息来源‘,
@Column(name="cust_industry")
private String cust_industry; // ‘客户所属行业‘,
@Column(name="cust_level")
private String cust_level; //‘客户级别‘,
@Column(name="cust_address")
private String cust_address; // ‘客户联系地址‘,
@Column(name="cust_phone")
private String cust_phone; // ‘客户联系电话‘,
// 有联系人的集合
/* targetEntity:对方的类型
* mappedBy: 自己在对方中的属性名 (ps:mappedBy出现在哪一方,哪一方意味着要放弃外键维护)
* */
@OneToMany(targetEntity=LinkMan.class,mappedBy="customer",cascade=CascadeType.ALL)
private Set
@Entity
@Table(name="cst_linkman")
public class LinkMan
{
@Id
@Column(name="lkm_id")
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Long lkm_id;// ‘联系人编号(主键)‘,
@Column(name="lkm_name")
private String lkm_name;// ‘联系人姓名‘,
@Column(name="lkm_gender")
private String lkm_gender;// ‘联系人性别‘,
@Column(name="lkm_phone")
private String lkm_phone;// ‘联系人办公电话‘,
@Column(name="lkm_mobile")
private String lkm_mobile;// ‘联系人手机‘,
@Column(name="lkm_email")
private String lkm_email;// ‘联系人邮箱‘,
@Column(name="lkm_qq")
private String lkm_qq;//‘联系人qq‘,
@Column(name="lkm_position")
private String lkm_position;// ‘联系人职位‘,
@Column(name="lkm_memo")
private String lkm_memo;// ‘联系人备注‘,
// 在多的一方有一的一方的对象--外键
@ManyToOne(targetEntity=Customer.class,cascade=CascadeType.ALL)
/* name:外键的字段名
referencedColumnName:指向的主键字段名*/
@JoinColumn(name="lkm_cust_id",referencedColumnName="cust_id")
private Customer customer;
(多对多的关系案例:)
Role:
@Entity
@Table(name="sys_role")
public class Role
{
@Id
@Column(name="role_id")
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Long role_id;// id
@Column(name="role_name")
private String role_name;//‘角色名称‘,
@Column(name="role_memo")
private String role_memo;// ‘备注‘,
// 有用户的集合
/*
* targetEntity:对方的类型
* mappedBy:自己在对方中的属性名
* */
@ManyToMany(targetEntity=User.class,mappedBy="roles",cascade=CascadeType.PERSIST)
private Set
User:
@Entity
@Table(name="sys_user")
public class User
{
@Id
@Column(name="user_id")
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Long user_id;// ‘用户id‘,
@Column(name="user_code")
private String user_code;//‘用户账号‘,
@Column(name="user_name")
private String user_name;// ‘用户名称‘,
@Column(name="user_password")
private String user_password;// ‘用户密码‘,
@Column(name="user_state")
private String user_state;// ‘1:正常,0:暂停‘,
// 有角色的集合
/*targetEntity:对方的类型
*
* */
@ManyToMany(targetEntity=Role.class,cascade=CascadeType.ALL)
/*name: 中间表的名称
joinColumns:自己在中间的一些配置
inverseJoinColumns:对方在中间表的一些配置*/
@JoinTable(name="sys_user_role",
joinColumns={
/*name:自己在中间表的字段名
referencedColumnName:指向自己主键的字段名*/
@JoinColumn(name="user_id",referencedColumnName="user_id")
},
inverseJoinColumns={
/*name:对方在中间表的字段名
referencedColumnName:指向对方主键的字段名*/
@JoinColumn(name="role_id",referencedColumnName="role_id")
})
private Set
1.1 JAP和hibernate中操作数据的方法对照