Tag: jpa

您可以从EntityListeners访问EntityManagers吗?

我知道JSR-000220 Enterprise JavaBeans 3.0最终版本(持久性)规范指出: “通常,可移植应用程序不应调用EntityManager或Query操作,访问其他实体实例或修改生命周期回调方法中的关系。” 这看起来非常严格。 我们有一种情况,我们想从EntityListener中访问EntityManager。 当在Jboss / Glassfish的监听器或任何其他应用程序服务器上使用EntityManager时,有没有人遇到任何不利影响/ pitfulls?

如何处理JPQL查询返回的Object类型?

我可以使用仅从一个表返回数据的JPQL轻松完成此操作。 SELECT m1 FROM MasatosanTest m1 这意味着返回一种数据类型。 所以我可以将查询结果存储到指定类型的List中: List mt = query.getResultList(); 代码段 private static final String JPQL_TEST = “SELECT m1 FROM MasatosanTest m1; @Path(“innerJoin”) @GET @Produces(“application/json”) public List getJoinedResult() { System.out.println(“getJoinedResult called”); EntityManager em = null; List mt = null; try { em = EmProvider.getDefaultManager(); Query query = em.createQuery(JPQL_TEST); mt = query.getResultList(); } catch(Exception […]

JPA CriteriaQuery OneToMany

我有两个具有OneToMany关系的实体。 为了简单起见,让我们假设他们是学校和学生,从学校到学生的单向关系。 我想找到有特定学生的学校对象(具有特定年龄,姓名,ssn的学生……)。 我知道我可以为简单的学校属性创建一个简单的标准(对于学校的名称,如下所示): ParameterExpression p = criteriaBuilder.parameter(String.class, “schoolName”); criteria = criteriaBuilder.and(criteria, criteriaBuilder.like(schoolRoot.get(“schoolName”) , p)); queryResult.setParameter(“schoolName”, schoolName + “%”); 但是,如果学生被表示为java.util.List而不是基本属性,我如何查询具有特定属性值的学生? 有人可以帮我解决这个问题吗? 我希望我能够解释我的问题。 谢谢

java.lang.ClassCastException:[B不能强制转换为java.lang.String

我编写了一个带有Field LoginId和Password的权限类。 Iam使用AES_ENCRYPT加密passwrd并在db中加载它。 我想只检索解密的密码。 所以,我在OPEN JPA 2.0中使用NAEDQueryis使用AES_DECRYPT。 我写的查询是: Query q = em.createNativeQuery(“select AES_DECRYPT(l.password,?2) from loginDetails l where l.loginID = ?1”); q.setParameter(1, loginId); q.setParameter(2, getKey()); String s = q.getSingleResult(); 但我得到以下例外: java.lang.ClassCastException: [B cannot be cast to java.lang.String at com.rcs.chef.validation.UserValidation.decryptedPasswordForID(UserValidation.java:99) at com.rcs.chef.validation.UserValidation.validateUser(UserValidation.java:81) at com.rcs.chef.validation.UserValidation.activate(UserValidation.java:72) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at org.apache.aries.blueprint.utils.ReflectionUtils.invoke(ReflectionUtils.java:226) at org.apache.aries.blueprint.container.BeanRecipe.invoke(BeanRecipe.java:824) […]

org.hibernate.QueryException:JPA样式的位置参数不是一个完整的序数

我有以下JPQL请求; @Query(value = “select req_t ” + “from TransactionRelation tr ” + “inner join tr.requestTransaction req_t ” + “inner join req_t.transactionStateHistory req_t_h ” + “inner join tr.responseTransaction resp_t ” + “inner join resp_t.transactionStateHistory resp_t_h ” + “where req_t.id >?1 ” + “and req_t.receiver.id=?2 and req_t.requestType in ?3” + “and NOT EXISTS (select t from resp_t_h […]

在JPA查询中排序返回Child对象

因此,如果我的JPA查询是这样的:从父p中选择不同的p,通过p.someProperty从左边连接获取p.children顺序 我正确地得到了p.someProperty排序的结果,并且我正确地获取并填充了我的p.children集合。 但我希望我的查询类似于“按p.someProperty,p.children.someChildProperty排序”,以便填充每个父对象内部的集合由someChildProperty进行子排序。 当我考虑实际为这些调用生成的sql时,这看起来很直观,但是当我尝试映射回分层对象时,我想这不太可能。

Spring Data JPA JpaRepository.save(实体)不返回数据库默认值

我有一个相当简单的问题。 在单个事务中,我的代码看起来像这样: MyClass c = new MyClass(); c.setPropA(“A”); c = myClassRepository.save(c); c.setPropC(“C”); 我的实体看起来像这样: @Entity @Table(name = “MY_CLASS”) public class MyClass { private String propA; private String propB; private String propC; @Id @Column(name = “PROP_A”, unique = true, nullable = false, updatable = false) public String getPropA() { return propA; } public void setPropA(String propA) { […]

Spring JPA – 枚举中枚举字段的默认值

我们有一个带有枚举字段的实体 – emailCommunicationStatus ,我们想要使用JPA注释为其设置默认值 – ‘UNKNOWN’ 。 但是,当我们将实体保存到DB时,此字段的值为null而不是。 对于布尔字段 – isLocked ,保存正确的默认值( false )。 @Entity public class Account { @Id @GeneratedValue @Column(name = “id”) protected Long id; @Column(columnDefinition = “boolean default false”) private boolean isLocked; @Column(length = 32, columnDefinition = “varchar(32) default ‘UNKNOWN'”) @Enumerated(value = EnumType.STRING) private CommunicationStatus emailCommunicationStatus; PlayerAccount() { super(); } } public […]

Java SE上的JPA:对象:entity.Customer@5e80188f不是已知的实体类型

我跟着 https://glassfish.java.net/javaee5/persistence/persistence-example.html 在Java SE环境中测试JPA。 在Eclipse中,我: 创建了一个新的JPA(2.1)项目; 在options-> JPA-> Persistent class management中,我选择了“自动发现带注释的类”而不是“必须在persistence.xml中列出带注释的类”。 我成功导入了zip文件(Client.java Customer.java Order.java)中的树Java类,并修改了persistence.xml文件以满足我的需要。 但是在尝试执行main时我得到以下错误。 [EL Info]: 2013-10-18 17:37:54.749–ServerSession(263489307)–EclipseLink, version: Eclipse Persistence Services – 2.5.1.v20130918-f2b9fc5 [EL Info]: connection: 2013-10-18 17:37:55.34–ServerSession(263489307)–file:/home/caterpillar/workspace/JPA_Java_SE/build/classes/_JPA_Java_SE login successful [EL Warning]: metamodel: 2013-10-18 17:37:55.359–The collection of metamodel types is empty. Model classes may not have been found during entity search for Java […]

没有元模型使用的JPA 2 Criteria API不区分大小写的条件

如何在没有元模型使用的情况下创建不区分大小写的条件查询? 我正在尝试做这样的事情: CriteriaBuilder builder = entityManager.getCriteriaBuilder(); CriteriaQuery criteria = builder.createQuery(Resident.class); Root personRoot = criteria.from(Resident.class); criteria.where(builder.and( builder.equal(builder.upper(personRoot.get(“firstName”)), filter.getFirstName())), //ERROR builder.equal(personRoot.get(“lastName”), filter.getLastName())); 但它会产生错误: 接口javax.persistence.criteria.CriteriaBuilder中的方法upper不能应用于给定的类型; 需要[ERROR]:找到javax.persistence.criteria.Expression [ERROR]:javax.persistence.criteria.Path