北在北方

太白枝头看,花开不计年,杯中浮日月,楼外是青天。

导航

2012年5月31日

摘要: JPQL:Java持久化查询语言,以面向对象的查询语法构造查询语句。 JPA使用javax.persistence.Query接口代表一个查询实例,Query实例由EntityManager通过指定查询语句构建。 以下程序中的em是EntityManager的一个实例,使用注入或通过 EntityManagerFactory 实例显式获取一个 EntityManager 实例。 1、一个基本的查询: SELECTu FROM User u 检索所有的User。u是User的别名。注意:关键字不区分大小写,例如:SELECT和select是一样的,但是实体的名称和实体的字段是区分大小... 阅读全文

posted @ 2012-05-31 23:07 CN.programmer.Luxh 阅读(3957) 评论(0) 推荐(0) 编辑

2012年5月30日

摘要: 实体Player:玩家。 实体Game:游戏。 玩家和游戏是多对多的关系。一个玩家可以玩很多的游戏,一个游戏也可以被很多玩家玩。 JPA中使用@ManyToMany来注解多对多的关系,由一个关联表来维护。这个关联表的表名默认是:主表名+下划线+从表名。(主表是指关系维护端对应的表,从表指关系被维护端对应的表)。这个关联表只有两个外键字段,分别指向主表ID和从表ID。字段的名称默认为:主表名+下划线+主表中的主键列名,从表名+下划线+从表中的主键列名。 需要注意的: 1、多对多关系中一般不设置级联保存、级联删除、级联更新等操作。 2、可以随意指定一方为关系维护端,在这个例子中,我... 阅读全文

posted @ 2012-05-30 23:15 CN.programmer.Luxh 阅读(13083) 评论(16) 推荐(6) 编辑

2012年5月28日

摘要: JPA使用@OneToOne来标注一对一的关系。 实体City:城市。 实体Mayor:市长。 City和Mayor是一对一的关系。 这里用两种方式描述JPA的一对一关系。一种是通过外键的方式(一个实体通过外键关联到另一个实体的主键);另外一种是通过一张关联表来保存两个实体一对一的关系。 1、通过关联表的方式来保存一对一的关系。 City.java如下: 1 package com.cndatacom.jpa.entity; 2 3 import javax.persistence.CascadeType; 4 import javax.persistence.Column;... 阅读全文

posted @ 2012-05-28 22:16 CN.programmer.Luxh 阅读(5405) 评论(6) 推荐(0) 编辑

2012年5月27日

摘要: 实体Company:公司。 实体Employee:雇员。 Company和Employee是一对多关系。那么在JPA中,如何表示一对多的双向关联呢? JPA使用@OneToMany和@ManyToOne来标识一对多的双向关联。一端(Company)使用@OneToMany,多端(Employee)使用@ManyToOne。 在JPA规范中,一对多的双向关系由多端(Employee)来维护。就是说多端(Employee)为关系维护端,负责关系的增删改查。一端(Company)则为关系被维护端,不能维护关系。 一端(Company)使用@OneToMany注释的mappedBy="c.. 阅读全文

posted @ 2012-05-27 21:43 CN.programmer.Luxh 阅读(9440) 评论(0) 推荐(0) 编辑

摘要: 注意:这里说的是一对多的单向关联,不是一对多的双向关联。 实体Author:作者。 实体Book:作者写的书。 Author和Book是一对多的关系。 在JPA中,用@OneToMany来标识一对多的关系。实现一对多的单向关联,只需在代表一的实体(Author)中使用@OneToMany映射标注就可以了,代表多的实体不需要使用任何映射标注。 有两种方式实现一对多的单向关联。一种是在只使用@OneToMany来标识,这种方式是通过一张第三方表来保存关系。还有一种是使用@OneToMany和@JoinColumn来标注,这种方式是在多的一方(Book)的表中增加一个外键列来保存关系。... 阅读全文

posted @ 2012-05-27 17:23 CN.programmer.Luxh 阅读(18479) 评论(1) 推荐(1) 编辑

2012年5月25日

摘要: @GeneratedValue:主键的产生策略,通过strategy属性指定。 主键产生策略通过GenerationType来指定。GenerationType是一个枚举,它定义了主键产生策略的类型。 1、AUTO 自动选择一个最适合底层数据库的主键生成策略。如MySQL会自动对应auto increment。这个是默认选项,即如果只写@GeneratedValue,等价于@GeneratedValue(strategy=GenerationType.AUTO)。 2、IDENTITY 表自增长字段,Oracle不支持这种方式。 3、SEQUENCE 通过序列产生主键,MySQL不... 阅读全文

posted @ 2012-05-25 11:34 CN.programmer.Luxh 阅读(6228) 评论(0) 推荐(0) 编辑

2012年5月24日

摘要: 一个实体,就是一个持久化的领域对象。通常情况下,一个实体代表在关系数据库中的一张表,实体的一个实例对应于表中的一行。 JPA规范对实体的要求: 1、实体类必须使用javax.persistence.Entity进行注解(@Entity)。 2、实体类必须要有一个公共的或者受保护的空参构造方法。 3、实体类不能声明为final,方法和需要持久化的属性也不能声明为final。 4、如果游离态的实体对象需要以值的方式进行传递,则必须实现Serializable接口。 5、实体类可以继承实体类和非实体类,非实体类也可以继承实体类。 6、持久化实例变量必须被声明为私有的、受保护的或者私... 阅读全文

posted @ 2012-05-24 23:46 CN.programmer.Luxh 阅读(1268) 评论(0) 推荐(1) 编辑

摘要: 客户叫我删除掉一条记录,说因为流程走错了,给我发过来一串很长的中文,说把这个名称的记录删掉。 我直接用PL/SQL操作数据库,根据名字相等搜索,没有记录。因为这些记录的名称都是很相似的,都是类似于“关于下发2012年第一季度“畅享移动福生活”数据业务整合营销活动细则的通知……”之类,于是用like搜索,才出来一条记录,我也没注意看,直接就删了。 然后我登陆系统,进行查询,发现那条记录还在,把正常的记录给删了,而且被删的这条记录关联的流程还在审批中的。 马上想到数据恢复,Google一下Oracle数据恢复的,找到了OracleFlashback。网上资料说Oracle 10g以上的版... 阅读全文

posted @ 2012-05-24 16:19 CN.programmer.Luxh 阅读(565) 评论(7) 推荐(0) 编辑

摘要: persistence.xml文件必须定义在classpath路径下的META-INF文件夹中。 我们看看基于Hibernate提供的一个比较完整的JPA2.0的persistence.xml文件。 persistence.xml: 1 <?xml version="1.0" encoding="UTF-8"?> 2 <persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence" 3 xmlns:xsi=" 阅读全文

posted @ 2012-05-24 12:27 CN.programmer.Luxh 阅读(22318) 评论(0) 推荐(2) 编辑

2012年5月22日

摘要: JPA,一套相当优秀的持久化规范,开始体验。 1、我使用Hibernate对JPA提供的实现,下载hibernate-release-4.1.1.Final.zip。解压。 在hibernate-release-4.1.1.Final\lib目录下有四个存放jar包的目录,其中 hibernate-release-4.1.1.Final\lib\jpa存放hibernate对JPA提供实现的jar hibernate-release-4.1.1.Final\lib\required 存放hibernate核心jar以及依赖的jar 这两个目录下的所有jar是我们体验JPA所必... 阅读全文

posted @ 2012-05-22 12:14 CN.programmer.Luxh 阅读(5551) 评论(1) 推荐(1) 编辑