Hibernate没有从数据库中提取正确的值



这个有点难以表达。这里的目标是为代码提供一个文件扩展名(字符串),然后它查询数据库以查看该扩展名是否可以上传。如果你想知道为什么我不把这些信息放在Map中,那是因为我需要能够在不重新编译程序的情况下改变这些信息。

我有这个Hibernate映射(基于旧式XML)。

<class name="com.everhood.FileTypeStatus" table="FILE_TYPE_FILTER">
<property name="extension" column="extension"/>
<property name="allowed" column="allowed"/>
</class>

和对象:

package com.everhood;

import java.io.Serializable;

public class FileTypeStatus implements Serializable {
private String extension;
private boolean allowed;

public String getExtension() {
return extension;
}

public void setExtension(String extension) {
this.extension = extension;
}

public boolean isAllowed() {
return allowed;
}

public void setAllowed(boolean allowed) {
this.allowed = allowed;
}

@Override
public String toString() {
final StringBuilder sb = new StringBuilder("FileTypeStatus{");
sb.append("extension='").append(extension).append(''');
sb.append(", allowed=").append(allowed);
sb.append('}');
return sb.toString();
}
}

和DAO类中的代码。

@Override
public FileTypeStatus getFileExtensionStatus(String fileExtension) {
Session session = sessionFactory.getCurrentSession();
Criteria crit = session.createCriteria(FileTypeStatus.class);
crit.add(Restrictions.eq("extension",fileExtension));
FileTypeStatus result = (FileTypeStatus) crit.uniqueResult();
return result;
}

如果您传递了一个有效的文件扩展名,例如"pdf",它应该返回一个FileTypeStatus对象,其中包含"pdf"对于扩展和& true"对于允许的字段。我得到的是null,这意味着它根本没有找到任何结果。如果我运行这个查询:

select * from file_type_filter where extension = 'pdf';

我得到一行,就像我应该得到的。

我的Java代码传递文件扩展名为全小写,所以这不是大小写敏感的问题。

我认为使用crit.uniqueResult()可能会导致问题,但是crit.list()返回一个空列表。我没有尝试过很多方法,所以我不能找出可能导致这个问题的原因。

我想我在原始代码中看到了一个错别字。我看到FILE_TYPE_FILTER

的大小写拼写我会尝试将类更改为:

<class name="com.everhood.FileTypeStatus" table="file_type_filter">

或者我会尝试将数据库表中的列更改为:

FILE_TYPE_FILTER

我建议这样做,因为你得到的结果:

select * from file_type_filter where extension = 'pdf';

你得到一个Null值:

<class name="com.everhood.FileTypeStatus" table="FILE_TYPE_FILTER">

最新更新