gpt4 book ai didi

java - JPA EntityManager createQuery() 错误

转载 作者:行者123 更新时间:2023-12-01 10:32:46 25 4
gpt4 key购买 nike

这是失败的:

public List<TypeActionCommerciale> requestTypeActionCommercialeSansNip() throws PersistenceException {
Query query = createQuery("from TypeActionCommercialeImpl where type != :type1");
query.setParameter("type1", TypeActionCommercialeEnum.NIP);
return (List<TypeActionCommerciale>) query.list();
}

异常(exception):

Hibernate: select typeaction0_.id as id1_102_, typeaction0_.libelle as libelle3_102_, typeaction0_.code as code4_102_, typeaction0_.type as type5_102_ from apex.typeActionCommerciale typeaction0_ where typeaction0_.type<>?

ERROR org.hibernate.engine.jdbc.spi.SqlExceptionHelper.logExceptions(SqlExceptionHelper.java:129)

  • No value specified for parameter 1 org.hibernate.exception.DataException: could not extract ResultSet at

我使用 setProperties 但我有同样的错误:

public List<TypeActionCommerciale> requestTypeActionCommercialeSansNip() throws PersistenceException {
Query query = createQuery("from TypeActionCommercialeImpl where type <> :type1");
final Map<String, Object> properties = new HashMap<>();
properties.put("type1", TypeActionCommercialeEnum.NIP);
query.setProperties(properties);
return (List<TypeActionCommerciale>) query.list();
}

最佳答案

问题就在这里query.setParameter("type1", TypeActionCommercialeEnum.NIP);

枚举类型在 hibernate 中没有定义,因此您必须存储枚举的名称并将其用于查询(简单的方法),然后使用:

query.setString("type1", TypeActionCommercialeEnum.NIP.name());

要直接使用枚举(困难的方法),您必须实现 CustomUserType 。您可以在这里找到如何https://docs.jboss.org/hibernate/orm/5.0/manual/en-US/html/ch06.html#types-custom

使用 CustomUserType 的主要优点是:

  1. 您可以将一个整数(更小)而不是表示枚举的字符串存储到数据库中。
  2. 在存储和检索对象期间将解析委托(delegate)给 hibernate。
  3. 您可以直接在查询中使用枚举(就像您尝试做的那样)

关于java - JPA EntityManager createQuery() 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35002509/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com