转自http://67566894.iteye.com/blog/659829

示例

@SuppressWarnings("serial")
@Entity
@Table(name="T_X")
public class X implements Serializable
{
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private int id; @Column(length=32)
private String name; @Transient //表示此数据不在数据库表里建立属性
private String temp; @Temporal(TemporalType.TIMESTAMP) //这个是带时分秒的类型
private Date date; @OneToOne(cascade = CascadeType.ALL, mappedBy = "x")
private A a;
}
@SuppressWarnings("serial")
@Entity
@Table(name="T_A")
public class A implements Serializable
{
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private int id; @OneToMany(cascade = CascadeType.ALL, mappedBy = "a", fetch = FetchType.EAGER)
private List<B> b = new ArrayList<B>(); @OneToOne()
@JoinColumn(name = "x_Id") //加这句后就会双方共同维护关系
private X x;
} @SuppressWarnings("serial")
@Entity
public class B implements Serializable{
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
protected int id; @ManyToOne()
@JoinColumn(name = "a_id")
protected A a;
}

要注意的是:fetch = FetchType.EAGER这句话在一个类里面只能出现一次,出现两次就会报错“cannot simultaneously fetch multiple bags”,要把其他的改为fetch = FetchType.LAZY延迟加载就可以了。听说把List集合改为Set也能解决这个错误。

其他要点: 
1、@Table(name="T_X")这句话可以不写,不写就已类名作为表名

2、如果想让两个类的属性生成一个数据表,在一个类里这样加入另一个类即可: @Embedded 
private C c;

3、如果想要一个类继承另一个类的所有属性,则在父类里这样写: 
@SuppressWarnings("serial") 
@Entity 
@MappedSuperclass   //增加这一行 
并把父类的所有属性的private改为protected即可

4、建议在一对多关联中在"一"方用延迟加载"多"方可以在HQL中显式的"迫切左外连接" left join fetch 这样做Hibernate可以少访问数据库,也可以用"@BatchSize(size = 5)"来减少访问数据库的次数

1. @Id 声明属性为主键

2. @GeneratedValue表示主键是自动生成策略,一般该注释和 @Id 一起使用

3. @Entity 任何 hibernte 映射对象都要有次注释

4. @Table(name = “tablename”) 类声明此对象映射到哪个表

5. @Column(name = “Name”,nullable=false,length=32) 声明数据 库字段和类属性对应关系

6. @Lob 声明字段为 Clob 或 Blob 类型

7. @OneToMany(mappedBy=”order”,cascade = CascadeType.ALL, fetch = FetchType.LAZY) 
   @OrderBy(value = “id ASC”) 
   一对多声明,和 ORM 产品声明类似,一看就明白了。 
   @ManyToOne(cascade=CascadeType.REFRESH,optional=false) 
   @JoinColumn(name = “order_id”) 
   声明为双向关联

8. @Temporal(value=TemporalType.DATE) 做日期类型转换。

9. @OneToOne(optional= true,cascade = CascadeType.ALL, mappedBy = “person”) 
   一对一关联声明 
   @OneToOne(optional = false, cascade = CascadeType.REFRESH) 
   @JoinColumn(name = “Person_ID”, referencedColumnName = “personid”,unique = true) 
   声明为双向关联

10. @ManyToMany(mappedBy= “students”) 
   多对多关联声明。 
  @ManyToMany(cascade = CascadeType.PERSIST, fetch = FetchType.LAZY) 
  @JoinTable(name = “Teacher_Student”, 
    joinColumns = {@JoinColumn(name = “Teacher_ID”, referencedColumnName = “teacherid”)}, 
    inverseJoinColumns = {@JoinColumn(name = “Student_ID”, referencedColumnName = 
    “studentid”)}) 
   多对多关联一般都有个关联表,是这样声明的!

11. @Transiten表示此属性与表没有映射关系,是一个暂时的属性

12. @Cache(usage= CacheConcurrencyStrategy.READ_WRITE)表示此对象应用缓存

JPA规范 
@Entity:通过@Entity注解将一个类声明为一个实体bean

@Table:通过 @Table注解可以为实体bean映射指定表,name属性表示实体所对应表的名称,如果没有定义 @Table,那么系统自动使用默认值:实体的类名(不带包名)

@Id:用于标记属性的主键

@Column:表示持久化属性所映射表中的字段,如果属性名与表中的字段名相同,则可以省略@Column注解,另外有两种方式标记,一是放在属性前,另一种是放在getter方法前,例如:

@Column(name = "EMPLOYEE_NAME")

private String employee_name; 或者

@Column(name = "EMPLOYEE_NAME")

public String getEmployee_name() {

return employee_name;

} 这两种方式都是正解的,根据个人喜好来选择。大象偏向于第二种,并且喜欢将属性名与字段名设成一样的,这样可以省掉@Column注解,使代码更简洁。

JPA使用指南 javax.persistence的注解配置讲解的更多相关文章

  1. JPA使用指南 javax.persistence的注解配置

    @SuppressWarnings("serial") @Entity @Table(name="T_X") public class X implements ...

  2. ejb3persistence.jar javax.persistence的注解配置

    JPA注解持久化类很方便,需要jar包:ejb3-persistence.jar.我用以下三个类来说明用法.  sh原创 转载请注明: http://67566894.iteye.com/blog/6 ...

  3. websphere部署 hibernate jpa & Error 500: javax/persistence/OneToOne.orphanRemoval()Z

    WebSphere 7 & Javax/Persistence/OneToMany.OrphanRemoval() Error 文章出处:http://www.mkyong.com/websp ...

  4. 使用javax.persistence注解配置PO对象

    JPA注解持久化类很方便,需要jar包:ejb3-persistence.jar下载 import java.io.Serializable; import javax.persistence.Col ...

  5. JPA多对多@manytomany注解配置实例

    维护端注解 @ManyToMany (cascade = CascadeType.REFRESH) @JoinTable (//关联表 name = "student_teacher&quo ...

  6. Could not open JPA EntityManager for transaction; nested exception is javax.persistence.PersistenceException: org.hibernate.exception.SQLGrammarException: Cannot open connection

    Could not open JPA EntityManager for transaction; nested exception is javax.persistence.PersistenceE ...

  7. 使用JPA保存对象时报nested exception is javax.persistence.RollbackException: Transaction marked as rollbackOnly错误

    使用JPA保存对象时报nested exception is javax.persistence.RollbackException: Transaction marked as rollbackOn ...

  8. [Spring Data JPA问题]Executing an update/delete query; nested exception is javax.persistence.TransactionRequiredException

    JPQL如下: @Modifying(clearAutomatically = true) @Query("UPDATE SyncTestFromTKDO SET stuAns = '' w ...

  9. 【spring data jpa】报错如下:Caused by: javax.persistence.EntityNotFoundException: Unable to find com.rollong.chinatower.server.persistence.entity.staff.Department with id 0

    报错如下: org.springframework.orm.jpa.JpaObjectRetrievalFailureException: Unable to find com.rollong.chi ...

随机推荐

  1. Linux提权:从入门到放弃

    *原创作者:piece of the past,本文属Freebuf原创奖励计划,未经许可禁止转载 日站就要日个彻底.往往我们能拿下服务器的web服务,却被更新地比西方记者还快的管理员把内网渗透的种子 ...

  2. 12.vue属性.监听.组件

    1.计算属性 https://cn.vuejs.org/v2/guide/computed.html new Vue({ computed:{//定义 show(){ } } }) ++计算属性1.h ...

  3. python3读文件时报错UnicodeDecodeError: 'gbk' codec can't decode byte 0x9f in position 2: illegal multibyte sequence

  4. python全栈开发 * 31知识点汇总 * 180716

    31 模块和包一.模块(一)模块的种类:内置模块,自定义模块,扩展模块第三方模块(二)自定义模块 1.模块的创建 : 新建一个py文件. 2.模块名 : 模块名需要符合变量的命名规范. 3.模块的导入 ...

  5. 利用vue-cli设置反向代理解决跨域问题

    在config文件夹下面的index.js里,添加如下代码即可 proxyTable: { '/apis': { //将接口域名印射为/apis target: 'http://192.168.3.1 ...

  6. Ubuntu 18.04安装JDK并配置环境变量

    1.官网下载jdk 下载链接 http://www.oracle.com/technetwork/java/javase/downloads/index.html 可以根据自己的系统进行下载 2.进行 ...

  7. VS统计项目代码行数

    ctrl + shift + F 输入:b*[^:b#/]+.*$ 选项图如下

  8. 监听器&上传下载&I18N

    监听器(Listener) 监听Java对象 的方法调用和属性改变() web的一个组件 事件驱动编程:事件源,事件名称,事件响应函数,事件对象 以后在Spring中的配置 WEB中有哪些监听器?  ...

  9. 020-Json结构数据序列化异步传递

    C#中将.Net对象序列化为Json字符串的方法: JavaScriptSerializer().Serialize(p),JavaScriptSerializer在System.Web.Extens ...

  10. List查询重复值的个数,并根据重复的数目从多到少排列

    package ttt; import java.nio.MappedByteBuffer; import java.util.ArrayList; import java.util.Collecti ...