openJPA enhancement error

openJPA enhancement error <openjpa-2.1.1-r422266:1148538 nonfatal user error> org.apache.openjpa.persistence.ArgumentException: This configuration disallows runtime optimization, but the following listed types were not enhanced at build time or at class load time with a javaagent: " com.wiloon.openjpa.entity.Animal". add line : <property name="openjpa.RuntimeUnenhancedClasses" value="supported" /> in persistence.xml 维护记录 时间 修改内容 原因 2026-10-09 修复本地 Hugo 构建的 Raw HTML 警告:代码/配置放入代码块,正文中的尖括号占位符改为行内代码;categories 改为 Java 正文中的 HTML/XML 片段被当作原始 HTML 丢弃;文件名/URL/标题按规范调整

Created 28286-12-28 · Updated 9096-10-09 · 1 min · 61 words · -

jpa annotation, 注解

jpa annotation, 注解 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: 是否唯一 .nullable: 是否可以为空 .inserttable: 是否可以插入 .updateable: 是否可以更新 .columnDefinition: 定义建表时创建此列的DDL .secondaryTable: 从表名。如果此列不建在主表上 (默认建在主表) ,该属性定义该列所在从表的名字。 @Column(name = "user_code", nullable = false, length=32)//设置属性userCode对应的字段为user_code,长度为32,非空 private String userCode; @Column(name = "user_wages", nullable = true, precision=12, scale=2)//设置属性wages对应的字段为user_wages,12位数字可保留两位小数,可以为空 private double wages; @Temporal(TemporalType.DATE)//设置为时间类型 private Date joinDate; @Id 设置主键 ...

Created 28286-05-28 · Updated 9096-10-09 · 3 min · 508 words · -

JPA 的 persistence.xml 文件

JPA的persistence.xml文件 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"> 7 <!-必须要有name属性,不能为空 -> 8 <persistence-unit name="jpaPU" transaction-type="RESOURCE_LOCAL"> 9 <!-可选 -> 10 <provider>org.hibernate.ejb.HibernatePersistence</provider> 11 <!-可选 -> 12 <jta-data-source>java:/DefaultDS</jta-data-source> 13 <!-可选 -> 14 <mapping-file>ormap.xml</mapping-file> 15 <!-可选 -> 16 <jar-file>MyApp.jar</jar-file> 17 <!-可选 -> 18 <class>org.acme.Employee</class> 19 <!-可选 -> 20 <shared-cache-mode>ENABLE_SELECTOVE</shared-cache-mode> 21 <!-可选 -> 22 <validation-mode>CALLBACK</validation-mode> 24 <!-厂商的特定属性 -> 25 <properties> 26 <!-配置Hibernate方言 -> 27 <property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5Dialect" /> 28 <!-配置数据库驱动 -> 29 <property name="hibernate.connection.driver_class" value="com.MySQL.jdbc.Driver" /> 30 <!-配置数据库用户名 -> 31 <property name="hibernate.connection.username" value="root" /> 32 <!-配置数据库密码 -> 33 <property name="hibernate.connection.password" value="root" /> 34 <!-配置数据库url -> 35 <property name="hibernate.connection.url" value="jdbc:MySQL://localhost:3306/jpa?useUnicode=true&characterEncoding=UTF-8" /> 36 <!-设置外连接抓取树的最大深度 -> 37 <property name="hibernate.max_fetch_depth" value="3" /> 38 <!-自动输出schema创建DDL语句 -> 39 <property name="hibernate.hbm2ddl.auto" value="update" /> 40 </properties> 41 </persistence-unit> 43 </persistence> xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd" 要注意使用的是2.0规范 ...

Created 29296-05-29 · Updated 9096-10-09 · 2 min · 225 words · -

Spring 生成 EntityManagerFactory 的三种方式

spring生成EntityManagerFactory的三种方式 1.LocalEntityManagerFactoryBean 只是简单环境中使用。它使用JPA PersistenceProvider自动检测机制( according to JPA’s Java SE bootstrapping ),并且大多数情况下,你只能定义一下persistence unit name 例如: <beans> <bean id="myEmf" class="org.springframework.orm.jpa.LocalEntityManagerFactoryBean"> <property name="persistenceUnitName" value="myPersistenceUnit"/> </bean> </beans> 2.从JNDI获取EntityManagerFactory 这个选项是当你应用发布在javaee5的服务器中。你可以参阅自己应用服务器文档,如何发布一个自定义的JPA provider到你的应用服务器中。 例: <beans> <jee:jndi-lookup id="myEmf" jndi-name="persistence/myPersistenceUnit"/> </beans> 当javaee服务器启动时,会自动检测persistence units。实际上,是检测应用包中的META-INF/persistence.xml 文件和web.xml中的persistence-unit-ref,以及定义的environment naming。我理解就是JNDI的name。 一般应用情景是: 在META-INF/persistence.xml中 使用<jta-data-source>java:/ MySQLDS</jta-data-source> 获取容器发布的Datesource。 transactions是使用的javaee容器支持的JTA系统,例如tomcat中,可以这样 如果你的项目准备部署在tomcat上,要支持jta,则需把相关的包放在tomcat/lib包下 jndi配置,可以把jndi的配置放置在 tomcat/conf/Catalina/域名(如localhost)/项目名.xml 文件的Context节点下,如下: <Resource name="" auth="Container" type="javax.sql.DataSource" username="" password="" driveClassName="oracle.jdbc.driver.OracleDriver" url="" maxActive="45" maxIdle="25"/> jndi也可以配置在server.xml,context.xml中 2)jta UserTransaction配置 在server.xml文件GlobalNamingResources节点下配置如下: <!- Resource configuration for UserTransaction use JOTM -> <Resource name="UserTransaction" auth="Container" type="javax.transaction.UserTransaction" factory="org.objectweb.jotm.UserTransactionFactory" jotm.timeout="60"/> 然后在 项目名.xml 文件的context节点下加: <ResourceLink name="UserTransaction" global="UserTransaction" type="javax.transaction.UserTransaction"/> SPRING 仅仅做的是是把EntityManagerFactory通过依赖注入到应用的object中。如果要管理事务,则使用JtaTransactionManager。 3.LocalContainerEntityManagerFactoryBean ...

Created 29296-05-29 · Updated 9096-10-09 · 2 min · 291 words · -

JPA JPQL

JPA JPQL 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)); 位置参数的格式为” ?+ 位置编号” 例: Query query = em.createQuery(“select p from Person p where p.personid=?1 “); query.setParameter(1,new Integer(1)); 如果你需要传递 java.util.Date 或 java.util.Calendar 参数进一个参数查询 ,你需要使用一个特殊的 setParameter() 方法 ,相关的 setParameter 方法定义如下: public interface Query ...

Created 6066-06-06 · Updated 9096-10-09 · 8 min · 1526 words · -

JPA 视图查询

JPA的视图查询 http://blog.csdn.net/chaijunkun/article/details/8442406 本文出处: http://blog.csdn.net/chaijunkun/article/details/8442406,转载请注明。由于本人不定期会整理相关博文,会对相应内容作出完善。因此强烈建议在原始出处查看此文。 昨天晚上遇到一个需求,每天早上要生成一份报告给各个部门的Leader。实现方式基本上确定为HTML格式的电子邮件。但是数据方面犯了难。原因在于数据库中存储的数据是跨表的,而且还要做count统计,这样得到的结果就不是原生的MySQL表,我用的又是JPA技术。我们知道,使用JPA第一步就是映射实体,每一张表就至少对应一个实体 (力求严谨,因为联合主键时一张表会对应两个对象) 。可是对于灵活的查询尤其是连接查询,并不存在一个真正的表与其对应,怎么样才能解决呢?来,我们来举个"栗子" 假设我们有两张表,一张学院表,一张学生表。学院表里存着学院ID和学院名称,学生表里存着学生的基本信息,包括学号、学院ID和学生姓名 (其它较复杂的属性我们不看了) ,正如下面的建表语句所示: -- ---------- -- Table structure for `depts` -- ---------- DROP TABLE IF EXISTS `depts`; CREATE TABLE `depts` ( `deptId` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT '学院ID', `deptName` varchar(50) NOT NULL COMMENT '学院名称', PRIMARY KEY (`deptId`) ) ENGINE=InnoDB AUTO_INCREMENT=14 DEFAULT CHARSET=utf8; -- ---------- -- Records of depts -- ---------- INSERT INTO `depts` VALUES ('1', '哲学院'); INSERT INTO `depts` VALUES ('2', '经济学院'); INSERT INTO `depts` VALUES ('3', '法学院'); INSERT INTO `depts` VALUES ('4', '教育学院'); INSERT INTO `depts` VALUES ('5', '文学院'); INSERT INTO `depts` VALUES ('6', '历史学院'); INSERT INTO `depts` VALUES ('7', '理学院'); INSERT INTO `depts` VALUES ('8', '工学院'); INSERT INTO `depts` VALUES ('9', '农学院'); INSERT INTO `depts` VALUES ('10', '医学院'); INSERT INTO `depts` VALUES ('11', '军事学院'); INSERT INTO `depts` VALUES ('12', '管理学院'); INSERT INTO `depts` VALUES ('13', '艺术学院'); 再建立一个学生表,再随便往里面插入点数据: ...

Created 20206-05-20 · Updated 9096-10-09 · 4 min · 791 words · -

Spring Boot 关系型数据库持久层概览

概述 在 Spring Boot 里访问 MySQL、PostgreSQL、SQLite 等关系型数据库,常见有几条路线。它们最终都经过 JDBC 连到数据库,差别在于中间抽象层有多高、SQL 由谁写。 应用代码 │ ├── Spring Data JDBC ← Repository 风格,底层仍是 JDBC ├── Spring Data JPA ← 对象为主,框架生成 SQL │ └── JPA(标准)→ Hibernate(实现) ├── MyBatis (+ Plus) ← SQL 手写 + 映射 └── JdbcTemplate / JDBI / jOOQ ← SQL 路线(字符串或类型安全 DSL) 下面分别介绍 Spring Data JDBC、Spring Data JPA、MyBatis、JdbcTemplate、JDBI、jOOQ,并简要说明 JPA 本身是什么。 Spring Data JDBC Spring Data JDBC 是 Spring 官方提供的 轻量持久化方案,依赖 spring-boot-starter-data-jdbc。它提供与 Spring Data JPA 类似的 CrudRepository 接口风格,但 不是 ORM,底层仍通过 JdbcTemplate 访问数据库。 ...

Created 22226-05-22 · Updated 20206-05-20 · 5 min · 974 words · -

Spring Boot + PostgreSQL 持久层框架

主流持久层框架 Spring Data JPA + Hibernate Spring Boot 默认推荐,依赖 spring-boot-starter-data-jpa ORM 框架,用注解映射对象和表 自动生成 SQL,支持 JPQL / Criteria API 适合领域模型复杂的场景 MyBatis / MyBatis-Plus 半自动 ORM,SQL 写在 XML 或注解中 对 SQL 控制力强,适合复杂查询 MyBatis-Plus 提供代码生成、分页等增强功能 JOOQ 类型安全的 SQL DSL,SQL 风格写法 编译期检查 SQL,适合喜欢写 SQL 的团队 商业数据库需付费版 Spring Data JDBC 比 JPA 更轻量,无懒加载、缓存等复杂特性 SQL 更透明,适合简单 CRUD R2DBC(响应式) 非阻塞响应式驱动,配合 WebFlux 使用 依赖 spring-boot-starter-data-r2dbc 选型建议 场景 推荐 快速开发,标准 CRUD Spring Data JPA 复杂 SQL,精细控制 MyBatis-Plus 强类型 SQL,重查询业务 JOOQ 响应式架构 R2DBC 连接池 Spring Boot 默认使用 HikariCP 作为连接池。 ...

Created 25256-04-25 · Updated 11116-05-11 · 3 min · 467 words · -

JPA criteria 查询,更新,删除

JPA criteria 查询,更新,删除 http://my.oschina.net/zhaoqian/blog/133500 http://www.thoughts-on-java.org/2013/10/criteria-updatedelete-easy-way-to.html

Created 22226-02-22 · Updated 22226-02-22 · 1 min · 5 words · -

detached entity passed to persist

detached entity passed to persist 病理特征: 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

Created 30306-05-30 · Updated 30306-05-30 · 1 min · 29 words · -

JPA EntityManager的四个主要方法 ——persist,merge,refresh和remove

JPA EntityManager的四个主要方法 ——persist,merge,refresh和remove public void persist(Object entity) persist 方法可以将实例转换为 managed( 托管 ) 状态。在调用 flush() 方法或提交事物后,实例将会被插入到数据库中。 对不同状态下的实例 A , persist 会产生以下操作 : 如果 A 是一个 new 状态的实体,它将会转为 managed 状态; 如果 A 是一个 managed 状态的实体,它的状态不会发生任何改变。但是系统仍会在数据库执行 INSERT 操作; 如果 A 是一个 removed( 删除 ) 状态的实体,它将会转换为受控状态; 如果 A 是一个 detached( 分离 ) 状态的实体,该方法会抛出 IllegalArgumentException 异常,具体异常根据不同的 JPA 实现有关。 public void merge(Object entity) merge 方法的主要作用是将用户对一个 detached 状态实体的修改进行归档,归档后将产生一个新的 managed 状态对象。 对不同状态下的实例 A , merge 会产生以下操作 : 如果 A 是一个 detached 状态的实体,该方法会将 A 的修改提交到数据库,并返回一个新的 managed 状态的实例 A2 ; ...

Created 28286-05-28 · Updated 28286-05-28 · 1 min · 184 words · -

JPA 实体生命周期

JPA 实体生命周期 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

Created 28286-05-28 · Updated 28286-05-28 · 1 min · 31 words · -

JPA EntityManager——persist,merge,refresh和remove

JPA EntityManager——persist,merge,refresh和remove public void persist(Object entity) persist 方法可以将实例转换为 managed( 托管 ) 状态。在调用 flush() 方法或提交事物后,实例将会被插入到数据库中。 对不同状态下的实例 A , persist 会产生以下操作 : 如果 A 是一个 new 状态的实体,它将会转为 managed 状态; 如果 A 是一个 managed 状态的实体,它的状态不会发生任何改变。但是系统仍会在数据库执行 INSERT 操作; 如果 A 是一个 removed( 删除 ) 状态的实体,它将会转换为受控状态; 如果 A 是一个 detached( 分离 ) 状态的实体,该方法会抛出 IllegalArgumentException 异常,具体异常根据不同的 JPA 实现有关。 public void merge(Object entity) merge 方法的主要作用是将用户对一个 detached 状态实体的修改进行归档,归档后将产生一个新的 managed 状态对象。 对不同状态下的实例 A , merge 会产生以下操作 : 如果 A 是一个 detached 状态的实体,该方法会将 A 的修改提交到数据库,并返回一个新的 managed 状态的实例 A2 ; ...

Created 22226-05-22 · Updated 22226-05-22 · 1 min · 183 words · -

JPA EntityManager

JPA EntityManager 持久化上下文 (Persistence Context ) 一个持久化单元 (Persistence Unit ) 就是关于一组Entity 类的命名配置。持久化单元是一个静态的概念。 一个持久化上下文 (Persistence Context ) 就是一个受管的Entity 实例的集合。每一个持久化上下文都关联一个持久化单元,持久化上下文不可能脱离持久化单元独立存在。持久化上下文中的Entity 实例就是相关联的持久化单元中的若干Entity 的实例。持久化上下文是一个动态的概念。 一个Entity 实例处于受管状态,其实质是: 该实例存在于某个持久化上下文中,并且可能被某个EntityManager 处理,也因为这个原因,所以我们说一个EntityManager 管理一个持久化上下文。 尽管持久化上下文非常重要,但是开发者不直接与之打交道,持久化上下文在应用程序中是透明的,我们需要通过EntityManager 间接管理它。 容器管理的EntityManager(Container-Managed EntityManager) 通过将@PersistenceContext 注解标注在EntityManager 类型的字段上,这样得到的EntityManager 就是容器管理的EntityManager 。由于是容器管理的,所以我们不需要也不应该显式关闭注入的EntityManager 实例。 容器管理的EntityManager 又细分为两种类型: 事务范围 (Transaction ) 的和扩展的 (Extended ) 。 若@PersistenceContext 未指定type 属性,或者指定为PersistenContextType.TRANSACTION ,则表示该EntityManager 是事务范围的;若指定为PersistenContextType.EXTENDED 的,则表示该EntityManager 是扩展的。 事务范围: 事务范围的EntityManager 是无状态的,可用在无状态会话Bean 和有状态会话Bean 中。 事务范围的EntityManager 依赖于JTA 事务,每次调用EntityManager 实例的相关方法时,EntityManager 会查看是否有某个持久化上下文与当前事务关联,如果有,则使用该持久化上下文;如果没有,则EntityManager 将创建一个持久化上下文,并将该持久化上下文与当前事务关联。当事务结束,则持久化上下文消失。 扩展的: 扩展的EntityManager 只能用于有状态会话Bean 。 扩展的EntityManager 在有状态会话Bean 实例创建的时候创建一个持久化上下文,并且直到该有状态会话Bean 销毁,则相应的持久化上下文才被移除。 由于在扩展的EntityManager 中,每次方法调用都是使用的相同的持久化上下文,所以前一次方法调用时产生的受管实体在下一个方法访问时仍然为受管实体。 ...

Created 30306-04-30 · Updated 30306-04-30 · 1 min · 160 words · -