这个有点难以表达。这里的目标是为代码提供一个文件扩展名(字符串),然后它查询数据库以查看该扩展名是否可以上传。如果你想知道为什么我不把这些信息放在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">