w1100n
This site is best viewed in Google Chrome
5/21/2015 13:59 | Tag:, ,

http://www.baeldung.com/2011/12/13/the-persistence-layer-with-spring-3-1-and-jpa/ Table of Contents 1. Overview 2. The JPA Spring Configuration with Java 3. The JPA Spring Configuration with XML 4. Going full XML-less 5. The Maven configuration 6. Conclusion 1. Overview This is tutorial shows how to set up … Continue reading

6/6/2014 8:04 | Tag:

http://flowercat.iteye.com/blog/667773 max result entityManager.createQuery(SQL_QUERY).setParameter(arg0,arg1).setMaxResults(10).getResultList();   JPQL就是一种查询语言,具有与 SQL 相 类似的特征, JPQL 是完全面向对象的,具备继承、多态和关联等特性,和hibernate HQL很相似。 查询语句的参数 JPQL 语句支持两种方式的参数定义方式 : 命名参数和位置参数 。 。在同一个查 询语句中只允许使用一种参数定义方式。 命令参数的格式为:“ : + 参数 名” 例: Query query = em.createQuery(“select p from Person p where p.personid=:Id “); query.setParameter(“Id”,new Integer(1)); 位置参数的格式为“ … Continue reading

5/30/2014 1:08 | Tag:

病理特征:Caused by: org.hibernate.PersistentObjectException: detached entity passed to persist: com.xxx.Xxx 简单地说,发生此异常即是一个游离的对象要被持久化(save)时,其ID既要ORM框架为它生成ID值,而此实体的ID却已然有值。对于新手容易出现此异常,但一些有经验的程序员有时也会碰到此问题,笔者就有一次,故与网友们“分享这次遭遇”。 让ORM为即将要持久的实体生成ID值(ORM的主键策略),是典型的做法,例如有自增长(即便是DBMS来做)、UUID,Hibernate框架则更多。因此,不能手工为此实体赋上ID值。笔者设计主要实体时,通常用UUID作主键,很显然它是字符型的。但是,有时会发现form表单为其赋一个长度为0的字符串,看html代码: <input name=”id” type=”text” id=”id” value=””/> 注意 value=”” 如果是增加,则不需要在form表单中安置这么个控件,笔者通常将增加和修改实体在一个form表单中完成,笔者很喜欢用Spring MVC。这时id字段被Spring MVC包装到实体中就有值了(其值是长度为0的空字符串)。ORM保存时上面的异常就来了。解决的办法很多,笔者是为其实体做一个属性编辑器,在编辑器判断ID是否为空且长度是否为0,若是,则置入一个null。在保存前检查一下ID也是一种解决办法。 有时在一对一、一对多保存时,关联方也会存在这种情况,所以关键检查ID字段就可以了 http://howsun.blog.sohu.com/129035715.html

5/29/2014 6:24 | Tag:,

hibernate annotation 之 主键生成策略 Posted on 2012-10-12 20:10 fancydeepin 阅读(2993) 评论(1) 编辑 收藏 所属分类: Hibernate Annotation Hibernate 默认总共支持 13 种生成策略 : 1. increment 2. identity 3. sequence 4. hilo 5. seqhilo 6. uuid 7. uuid.hex 8. guid 9. native 10. … Continue reading

5/29/2014 5:47 | Tag:

Posted on 2012-05-24 12:27 CN.programmer.Luxh 阅读(7217) 评论(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=”http://www.w3.org/2001/XMLSchema-instance” 4 xsi:schemaLocation=”http://java.sun.com/xml/ns/persistence 5 http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd”> 6 7 <!–必须要有name属性,不能为空 –> 8 <persistence-unit name=”jpaPU” transaction-type=”RESOURCE_LOCAL”> 9 <!–可选 –> 10 … Continue reading

5/29/2014 1:47 | Tag:,

http://www.cnblogs.com/seed_lee/archive/2011/02/14/1954720.html hibernate的ID生成策略(annotation方式@GeneratedValue) 记录hibernate中使用annotation的方式实现主键生成策略: 一般情况下,hibernate中使用annotation的主键生成策略,都是使用annotation的标准注解(javax.persistence.GeneratedValue),而不是使用hibernate的扩展的annotation方式,当然,使用也是没有错的,推荐使用标准的annotation。 标准的annotation方式的主键生成策略如下: AUTO – 可以是identity column类型,或者sequence类型或者table类型,取决于不同的底层数据库. TABLE – 使用表保存id值(也就是会为应用的表创建一张专门保存Id的表,记录对应的表的对应最大的ID值,如下图) CPU7@71(TD68TSQ(FD@D}MM IDENTITY – identity column SEQUENCE – sequence 下面的例子展示了使用SEQ_STORE配置的sequence生成器 @Id @GeneratedValue(strategy=GenerationType.SEQUENCE, generator=”SEQ_STORE”) public Integer getId() { … } 下面这个例子使用的是identity生成器 @Id @GeneratedValue(strategy=GenerationType.IDENTITY) public Long getId() { … } AUTO生成器适用于可移植的应用(在多个DB间切换). … Continue reading

5/28/2014 9:17 | Tag:

http://mzhj.iteye.com/blog/711685   @Embedded 你可以创建一个类被嵌套在实体类中,在这种情况下我们可以使用@Embedded注解。例如,在Hotel类中 可能会有一个Address。 Address是Hotel不可分割的一部分,没有ID, 并且不会被存储在分开的collection中。在这种情况下我们可以使用@Embedded注解   @Entity 标识这个pojo是一个jpa实体 Specifies that the class is an entity. This annotation is applied to the entity class.   @Table (name= users ) //指定表名为users   @Column @Column(name=”DESC”, nullable=false, length=512) 设置字段类型 通过@Column注解设置,包含的设置如下 .name:字段名 .unique:是否唯一 … Continue reading

5/28/2014 8:42 | Tag:

public void persist(Object entity) persist 方法可以将实例转换为 managed( 托管 ) 状态。在调用 flush() 方法或提交事物后,实例将会被插入到数据库中。   对不同状态下的实例 A , persist 会产生以下操作 : 1. 如果 A 是一个 new 状态的实体,它将会转为 managed 状态; 2. 如果 A 是一个 managed 状态的实体,它的状态不会发生任何改变。但是系统仍会在数据库执行 INSERT 操作; 3. 如果 A 是一个 removed( … Continue reading

5/28/2014 8:38 | Tag:

JPA 实体生命周期分为4种状态,其实跟HIBERNATE的映射实体差不多。分为:新建,受管(托管),分离(游离),删除。 新建:此时的内存中已经创建了实体实例( 比如 NEW People() ),但是还没有同数据库或持久化上下文进行关联,所以目前它还不是一个标准的持久实体身份。所以对它的任何改变,都不会同步到数据库中。 受管:此时实体已经在数据库中存在了持久化身份,并且同持久化上下文进行了关联,一般来说,在调用JPA的persist API后,实体实例已处于受管状态了。在修改实体之后,当事务提交,或显示调用flush()操作,实体状态会同步到数据库中。 分离:还具有持久化身份,但是不在同持久化上下文关联。 删除:同持久化上下文关联,但是客户已经打算从数据库销毁这一实体。 JPA的EntityManager也为我们准备好了API来完成对这些实体的操作: persist方法将实体变为受管状态,持久化到数据库。merge方法将当前的实体状态合并(更新)到当前持久化上下文中。remove方法直接从数据库里销毁实体(删除),remove方法只是将数据库里的实体删除,并没有销毁内存里的实体对象,当事务提交或者调用flush方法,数据库里的实体才会被删除。 http://blog.163.com/oyhj_nicholas/blog/static/323592520107211295105

5/22/2014 11:03 | Tag:

public void persist(Object entity) persist 方法可以将实例转换为 managed( 托管 ) 状态。在调用 flush() 方法或提交事物后,实例将会被插入到数据库中。   对不同状态下的实例 A , persist 会产生以下操作 : 1. 如果 A 是一个 new 状态的实体,它将会转为 managed 状态; 2. 如果 A 是一个 managed 状态的实体,它的状态不会发生任何改变。但是系统仍会在数据库执行 INSERT 操作; 3. 如果 A 是一个 removed( … Continue reading

JPA
5/22/2014 3:12 | Tag:

(1)、JPA介绍: JPA全称为Java Persistence API ,Java持久化API是Sun公司在Java EE 5规范中提出的Java持久化接口。JPA吸取了目前Java持久化技术的优点,旨在规范、简化Java对象的持久化工作。使用JPA持久化对象,并不是依赖于某一个ORM框架。 为什么要使用JAP? 在说为什么要使用JPA之前,我们有必要了解为什么要使用ORM技术。 ORM 是Object-Relation-Mapping,即对象关系影射技术,是对象持久化的核心。ORM是对JDBC的封装,从而解决了JDBC的各种存在问题: a) 繁琐的代码问题 用JDBC的API编程访问数据库,代码量较大,特别是访问字段较多的表的时候,代码显得繁琐、累赘,容易出错。例如:PreparedStatement pstmt=con.prepareStatment(“insert into account value(?,?,?,?,?,?,?,?,?)”); ORM则建立了Java对象与数据库对象之间的影射关系,程序员不需要编写复杂的SQL语句,直接操作Java对象即可,从而大大降低了代码量,也使程序员更加专注于业务逻辑的实现。 b) 数据库对象连接问题 关系数据对象之间,存在各种关系,包括1对1、1对多、多对1、多对多、级联等。在数据库对象更新的时候,采用JDBC编程,必须十分小心处理这些关系,以保证维持这些关系不会出现错误,而这个过程是一个很费时费力的过程。 ORM建立Java对象与数据库对象关系影射的同时,也自动根据数据库对象之间的关系创建Java对象的关系,并且提供了维持这些关系完整、有效的机制。 c) 系统架构问题 JDBC属于数据访问层,但是使用JDBC编程时,必须知道后台是用什么数据库、有哪些表、各个表有有哪些字段、各个字段的类型是什么、表与表之间什么关系、创建了什么索引等等与后台数据库相关的详细信息。 使用ORM技术,可以将数据库层完全隐蔽,呈献给程序员的只有Java的对象,程序员只需要根据业务逻辑的需要调用Java对象的Getter和 Setter方法,即可实现对后台数据库的操作,程序员不必知道后台采用什么数据库、有哪些表、有什么字段、表与表之间有什么关系。 d) 性能问题 采用JDBC编程,在很多时候存在效率低下的问题。 pstmt =conn.prepareStatement(“insert into user_info values(?,?)”); for (int i=0; i<1000; … Continue reading

4/30/2014 3:21 | Tag:

1. 持久化上下文(Persistence Context )   一个持久化单元(Persistence Unit )就是关于一组Entity 类的命名配置。持久化单元是一个静态的概念。 一个持久化上下文(Persistence Context )就是一个受管的Entity 实例的集合。每一个持久化上下文都关联一个持久化单元,持久化上下文不可能脱离持久化单元独立存在。持久化上下文中的Entity 实例就是相关联的持久化单元中的若干Entity 的实例。持久化上下文是一个动态的概念。 一个Entity 实例处于受管状态,其实质是:该实例存在于某个持久化上下文中,并且可能被某个EntityManager 处理,也因为这个原因,所以我们说一个EntityManager 管理一个持久化上下文。 尽管持久化上下文非常重要,但是开发者不直接与之打交道,持久化上下文在应用程序中是透明的,我们需要通过EntityManager 间接管理它。   2. 容器管理的EntityManager(Container-Managed EntityManager)   通过将@PersistenceContext 注解标注在EntityManager 类型的字段上,这样得到的EntityManager 就是容器管理的EntityManager 。由于是容器管理的,所以我们不需要也不应该显式关闭注入的EntityManager 实例。 容器管理的EntityManager 又细分为两种类型:事务范围(Transaction )的和扩展的(Extended )。 若@PersistenceContext 未指定type 属性,或者指定为PersistenContextType.TRANSACTION ,则表示该EntityManager … Continue reading

辽ICP备14012896