JPA使用指南 javax.persistence的注解配置讲解
转自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的注解配置讲解的更多相关文章
- JPA使用指南 javax.persistence的注解配置
@SuppressWarnings("serial") @Entity @Table(name="T_X") public class X implements ...
- ejb3persistence.jar javax.persistence的注解配置
JPA注解持久化类很方便,需要jar包:ejb3-persistence.jar.我用以下三个类来说明用法. sh原创 转载请注明: http://67566894.iteye.com/blog/6 ...
- websphere部署 hibernate jpa & Error 500: javax/persistence/OneToOne.orphanRemoval()Z
WebSphere 7 & Javax/Persistence/OneToMany.OrphanRemoval() Error 文章出处:http://www.mkyong.com/websp ...
- 使用javax.persistence注解配置PO对象
JPA注解持久化类很方便,需要jar包:ejb3-persistence.jar下载 import java.io.Serializable; import javax.persistence.Col ...
- JPA多对多@manytomany注解配置实例
维护端注解 @ManyToMany (cascade = CascadeType.REFRESH) @JoinTable (//关联表 name = "student_teacher&quo ...
- 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 ...
- 使用JPA保存对象时报nested exception is javax.persistence.RollbackException: Transaction marked as rollbackOnly错误
使用JPA保存对象时报nested exception is javax.persistence.RollbackException: Transaction marked as rollbackOn ...
- [Spring Data JPA问题]Executing an update/delete query; nested exception is javax.persistence.TransactionRequiredException
JPQL如下: @Modifying(clearAutomatically = true) @Query("UPDATE SyncTestFromTKDO SET stuAns = '' w ...
- 【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 ...
随机推荐
- 关于 python中的转义字符
"abc\n" 前面加 r,表示原生输出,不转义.实际上是用 \代替 \\,其实是已经转义过了,并不是不转义. 看这个例子: print(r"abc \n") ...
- 3.nodejs(三) 常用API
1.querystring querystring: --- > qs npm i qs ==> qs:parse/stringify第三方插件,只有一个参数 JSON.parse 字符 ...
- Yarn Node Labels
Yarn Node Labels + Capacity-Scheduler 在yarn-site.xml中开启capacity-schedule yarn-site.xml <property& ...
- ArcGIS AddIN Sample学习笔记
1.AddInEditorExtension 功能描述:编辑器扩展,实现在编辑要素,对编辑事件的监听,及对新创建的要素的处理 核心代码: void Events_OnStartEditing() { ...
- 用SQL快速删除U8账套
一.问题提出 通过"系统管理"来删除999账套,首先要求你备份然后才能删除.头痛的是: 1)备份需要发费很长的时间,特别是账套数据文件比较大时. 2)备份时,你的本本基本处于死机状 ...
- python全栈开发 * 15知识点汇总 * 180621
#15 函数二 与 匿名函数1.dir() # 查看内置属性,将对象所有方法名放在另一个列表中.dic={"水果":"香蕉",'蔬菜':"土豆&quo ...
- Storm UI说明
一.Storm ui 首页主要分为4块: Cluster Summary,Topology summary,Supervisor summary,Nimbus Configuration Cluste ...
- python自动类型转换(针对于Number数据类型来的)精度从低到高 bool->int-> float->complex 当两个不同是数据类型运算时候,默认想更高进度转化
# ### 自动类型转换(针对于Number数据类型来的) ''' 精度从低到高 bool->int-> float->complex 当两个不同是数据类型运算时候,默认想更高进度转 ...
- VUE—打印(原生态网页打印)
//打印触发的方法 print(e){ let subOutputRankPrin = document.getElementById('printcode'); var options = { fo ...
- spring-boot 速成(2) devtools之热部署及LiveReload
JRebel热部署插件相信很多人都知道,但是这是一款商业插件,spring-boot框架也提供了类似的功能,即:devtools,关键是免费的! 使用方法如下: 一.添加 devtools依赖 dep ...