相关疑难解决方法(0)

使用Hibernate查询:冒号被视为参数/转义冒号

return sessionFactory.getCurrentSession().
            createQuery("FROM Weather WHERE city_id = :id AND date " +
                    "BETWEEN now()::date AND now()::date + (:days - 1)").
                    setInteger("id", city_id).setString("days", days).list();
Run Code Online (Sandbox Code Playgroud)

得到错误:

org.hibernate.hql.ast.QuerySyntaxException: unexpected token: :
Run Code Online (Sandbox Code Playgroud)

如何在HQL中使用此语法?

基本上问题是我想在我的查询中使用冒号(:),但是当hibernate看到冒号时,它认为它是一个参数(:parameterName是HQL中参数的语法),正如你从我的2个用途中看到的那样(:id and :days).

但是当我使用now():: date语句时,它是特定的postgreSQL语法,hibernate破坏了一切.

java postgresql spring hibernate hql

23
推荐指数
2
解决办法
2万
查看次数

Hibernate枚举映射

我需要事先将未实现接口的枚举映射到现有数据库,现有数据库使用枚举将枚举存储在与所有者类相同的表中@Enumerated(EnumType.STRING).

class A {
    HasName name;
}

interface HasName {
    String getName();
}

enum X implements HasName {
    John, Mary;

    public String getName() { return this.name(); }
}

enum Y implements HasName {
    Tom, Ann;

    public String getName() { return this.name(); }
}
Run Code Online (Sandbox Code Playgroud)

在这种情况下应该如何处理映射?持久化到数据库不会改变,因为实现接口的所有枚举都会有不同的值,但我不确定如何从数据库中检索对象(我是否需要一个自定义映射器,它将尝试实例化一个枚举使用指定的枚举类?Hibernate本身是否支持此功能?).

java mapping enums hibernate

16
推荐指数
2
解决办法
4万
查看次数

如何使用JPA和Hibernate映射PostgreSQL枚举

我正在尝试将名为transmission_result的postgres自定义类型映射到Hibernate/JPA POJO.postgres自定义类型或多或少是枚举类型的字符串值.

我创建了一个名为PGEnumUserType的自定义EnumUserType以及一个表示postgres枚举值的枚举类.当我对一个真正的数据库运行时,我收到以下错误:'错误:列"状态"的类型为transmission_result,但表达式的类型为字符变化提示:您需要重写或转换表达式.位置:135'

看到这个,我想我需要将我的SqlTypes更改为Types.OTHER.但这样做会破坏我的集成测试(在内存数据库中使用HyperSQL)和消息:'引起:java.sql.SQLException:在语句中找不到表[select enrollment0 _."id"as id1_47_0_,enrollment0 _."tpa_approval_id"as tpa2_47_0_ ,enrollment0 _."tpa_status_code"as tpa3_47_0_,enrollment0 _."status_message"as status4_47_0_,enrollment0 _."approval_id"as approval5_47_0_,enrollment0 _."transmission_date"as transmis6_47_0_,enrollment0 _."status"as status7_47_0_,enrollment0 _."transmit"as transmit8_47_0_ from"传输"enrollment0_ where enrollment0 _."id"=?]'

我不确定为什么更改sqlType会导致此错误.任何帮助表示赞赏.

JPA/Hibernate实体:

@Entity
@Access(javax.persistence.AccessType.PROPERTY)
@Table(name="transmissions")
public class EnrollmentCycleTransmission {

// elements of enum status column
private static final String ACCEPTED_TRANSMISSION = "accepted";
private static final String REJECTED_TRANSMISSION = "rejected";
private static final String DUPLICATE_TRANSMISSION = "duplicate";
private static final String EXCEPTION_TRANSMISSION = "exception";
private static final String RETRY_TRANSMISSION = "retry";

private Long transmissionID;
private …
Run Code Online (Sandbox Code Playgroud)

java postgresql enums hibernate jpa

8
推荐指数
3
解决办法
5859
查看次数

Hibernate EnumType实例化异常

我正在使用基于hibernate 4和xml的映射.这是我得到的例外

Caused by: org.hibernate.MappingException: Unable to instantiate custom type: org.hibernate.type.EnumType
    at org.hibernate.type.TypeFactory.custom(TypeFactory.java:193)
    at org.hibernate.type.TypeFactory.custom(TypeFactory.java:179)
    at org.hibernate.type.TypeFactory.byClass(TypeFactory.java:103)
    at org.hibernate.type.TypeResolver.heuristicType(TypeResolver.java:130)
    at org.hibernate.mapping.SimpleValue.getType(SimpleValue.java:307)
    at org.hibernate.mapping.SimpleValue.isValid(SimpleValue.java:294)
    at org.hibernate.mapping.Property.isValid(Property.java:238)
    at org.hibernate.mapping.PersistentClass.validate(PersistentClass.java:469)
    at org.hibernate.mapping.RootClass.validate(RootClass.java:270)
    at org.hibernate.cfg.Configuration.validate(Configuration.java:1294)
    at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1742)
    at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1788)
    at org.springframework.orm.hibernate4.LocalSessionFactoryBuilder.buildSessionFactory(LocalSessionFactoryBuilder.java:189)
    at org.springframework.orm.hibernate4.LocalSessionFactoryBean.buildSessionFactory(LocalSessionFactoryBean.java:350)
    at org.springframework.orm.hibernate4.LocalSessionFactoryBean.afterPropertiesSet(LocalSessionFactoryBean.java:335)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory$6.run(AbstractAutowireCapableBeanFactory.java:1504)
    at java.security.AccessController.doPrivileged(Native Method)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1502)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1452)
    ... 35 more
Caused by: java.lang.NullPointerException
    at org.hibernate.type.EnumType.setParameterValues(EnumType.java:153)
    at org.hibernate.type.TypeFactory.injectParameters(TypeFactory.java:131)
    at org.hibernate.type.TypeFactory.custom(TypeFactory.java:189)
    ... 53 more
Run Code Online (Sandbox Code Playgroud)

这是我正在使用的枚举映射

<property name="coachingStatus" column="status" update="true" insert="true" index="true">
      <type name="org.hibernate.type.EnumType">
        <param name="enumClass">com.tutorial.enums.CoachingStatus</param>
        <param name="type">12</param>
      </type>
    </property> …
Run Code Online (Sandbox Code Playgroud)

java hibernate

7
推荐指数
1
解决办法
6403
查看次数

使用Enum作为参数的Hibernate查询

我没有运气来使用hibernate(使用HSQLDB)查询.查询代码如下所示:

Query query = session.createQuery("from "+tableName+" where CURRENCY = :currency");
query.setParameter("currency",currency);
List<ExchangeRate> list = query.list();
Run Code Online (Sandbox Code Playgroud)

我一直得到"引起:org.hsqldb.HsqlException:转换中的数据类型不兼容":

org.hibernate.exception.SQLGrammarException: could not execute query
    at org.hibernate.exception.internal.SQLExceptionTypeDelegate.convert(SQLExceptionTypeDelegate.java:82)
    at org.hibernate.exception.internal.StandardSQLExceptionConverter.convert(StandardSQLExceptionConverter.java:49)
    at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:125)
    at org.hibernate.loader.Loader.doList(Loader.java:2529)
    at org.hibernate.loader.Loader.doList(Loader.java:2512)
    at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2342)
    at org.hibernate.loader.Loader.list(Loader.java:2337)
    at org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:495)
    at org.hibernate.hql.internal.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:357)
    at org.hibernate.engine.query.spi.HQLQueryPlan.performList(HQLQueryPlan.java:195)
    at org.hibernate.internal.SessionImpl.list(SessionImpl.java:1275)
    at org.hibernate.internal.QueryImpl.list(QueryImpl.java:101)
    at com.rockymountaineer.wsapi.db.test.ExchangeRateDAOTest.getRate(ExchangeRateDAOTest.java:27)
    at com.rockymountaineer.wsapi.db.test.ExchangeRateDAOTest.main(ExchangeRateDAOTest.java:39)
Caused by: java.sql.SQLSyntaxErrorException: incompatible data type in conversion
    at org.hsqldb.jdbc.JDBCUtil.sqlException(Unknown Source)
    at org.hsqldb.jdbc.JDBCUtil.throwError(Unknown Source)
    at org.hsqldb.jdbc.JDBCPreparedStatement.setParameter(Unknown Source)
    at org.hsqldb.jdbc.JDBCPreparedStatement.setBytes(Unknown Source)
    at org.hibernate.type.descriptor.sql.VarbinaryTypeDescriptor$1.doBind(VarbinaryTypeDescriptor.java:57)
    at org.hibernate.type.descriptor.sql.BasicBinder.bind(BasicBinder.java:93)
    at org.hibernate.type.AbstractStandardBasicType.nullSafeSet(AbstractStandardBasicType.java:280)
    at org.hibernate.type.AbstractStandardBasicType.nullSafeSet(AbstractStandardBasicType.java:275)
    at org.hibernate.param.NamedParameterSpecification.bind(NamedParameterSpecification.java:66)
    at …
Run Code Online (Sandbox Code Playgroud)

java sql enums hibernate

6
推荐指数
1
解决办法
8847
查看次数

标签 统计

hibernate ×5

java ×5

enums ×3

postgresql ×2

hql ×1

jpa ×1

mapping ×1

spring ×1

sql ×1