java - 对于映射到 java.lang.Class 的列的查询,不支持区分符类型 null

标签 java hibernate orm

我们正在使用 Hibernate 进行 ORM 并尝试映射 java.lang.Class 类型的列。列已正确映射,但无法在 where 子句中使用列“type”进行查询。

我们有以下实体

@Entity
@Table(name = "my_entities")
public class MyEntity {

    private Class type;

    @Column(name = "type")
    public Class getType() {
        return type;
    }

    // setter

}

以及带有查询的方法

public MyEntity get(Class clazz) {
     Session session = sessionFactory.getCurrentSession();
     Criteria criteria = session.createCriteria(MyEntity.class); 

     criteria.add(Restrictions.eq("type", clazz));

     return (MyEntity) criteria.uniqResult();
}  

结果就是这个异常

Caused by: org.hibernate.QueryException: Unsupported discriminator type null
    at org.hibernate.loader.criteria.CriteriaQueryTranslator.getTypedValue(CriteriaQueryTranslator.java:613) ~[CriteriaQueryTranslator.class:4.3.11.Final]
    at org.hibernate.criterion.SimpleExpression.getTypedValues(SimpleExpression.java:116) ~[SimpleExpression.class:4.3.11.Final]
    at org.hibernate.loader.criteria.CriteriaQueryTranslator.getQueryParameters(CriteriaQueryTranslator.java:346) ~[CriteriaQueryTranslator.class:4.3.11.Final]
    at org.hibernate.loader.criteria.CriteriaLoader.list(CriteriaLoader.java:126) ~[CriteriaLoader.class:4.3.11.Final]
    at org.hibernate.internal.SessionImpl.list(SessionImpl.java:1718) ~[SessionImpl.class:4.3.11.Final]
    at org.hibernate.internal.CriteriaImpl.list(CriteriaImpl.java:380) ~[CriteriaImpl.class:4.3.11.Final]

最佳答案

这似乎是 Jira 中的一个问题.

您可以通过仅将类名存储在数据库中并在创建时来回转换来规避该问题。

@Column(name = "type")
private String type;

public void setType(Class clazz){
    this.type = clazz.getName();
}

public Class getType() {
    return Class.forName(type); //Exception handling omitted
}

在你的 DAO 中:

public MyEntity get(Class clazz) {
    return getCurrentSession().createCriteria(MyEntity.class)
      .add(Restrictions.eq("type", clazz.getName())).uniqueresult();

关于java - 对于映射到 java.lang.Class 的列的查询,不支持区分符类型 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51035784/

相关文章:

java - 解析日期以删除时区

Java方法泛型理解

java - SQL语句没有执行! java.sql.SQLException : General error

hibernate - Web 应用程序在 tomcat 6.0.21/7.0.11 中毫 headless 绪地挂起

java - MSSQL 2014 的错误 hibernate 方言

nhibernate - 将 NHibernate ICompositeUserType 与值类型结合使用

node.js - Sequelize 一对多查询(包含)产生 Y 与 X 无关

java - 如何通过servlet打开Excel文件

java - Spring安全.DaoAuthenticationProvider : Cannot resolve reference to bean

python - SQLAlchemy:使用 id 而不是对象添加关系?