【发布时间】:2014-05-16 16:06:32
【问题描述】:
我有 Oracle 表,其中包含 char 类型的列。在我的 Entity 类中,我将 oracle char 类型映射到 java string 类型。
这是我的实体类的代码。
@Entity
@Table(name="ORG")
public class Organization {
private String serviceName;
private String orgAcct;
//Some other properties goes here...
@Column(name="ORG_ACCT", nullable=false, length=16)
public String getOrgAcct() {
return this.orgAcct;
}
public void setOrgAcct(String orgAcct) {
this.orgAcct = orgAcct;
}
@Column(name="SERVICE_NAME",nullable=true, length=16)
public String getServiceName() {
return this.serviceName;
}
public void setServiceName(String serviceName) {
this.serviceName = serviceName;
}
}
这里的 serviceName 和 orgAcct 都是 Oracle 中的 char 类型变量
在我的 DAO 类中,我编写了一个 HQL 查询来使用 serviceName 和 orgAcct 属性获取 Oranization 实体对象。
@Repository
@Scope("singleton") //By default scope is singleton
public class OrganizationDAOImpl implementsOrganizationDAO {
public OrganizationDAOImpl(){
}
public Organization findOrganizationByOrgAcctAndServiceName(String orgAcct,String serviceName){
String hqlQuery = "SELECT org FROM Organization org WHERE org.serviceName = :serName AND org.orgAcct = :orgAct";
Query query = getCurrentSession().createQuery(hqlQuery)
.setString("serName", serviceName)
.setString("orgAct", orgAcct);
Organization org = findObject(query);
return org;
}
}
但是当我调用 findOrganizationByOrgAcctAndServiceName() 方法时,我将组织对象设为 null(即 HQL 查询未检索 Char 类型数据)。
请帮我解决这个问题。这里我无法将 Oracle 类型 char 更改为 Varchar2。我需要使用 oracle char 类型变量。
@EngineerDollery 在抛出上面的帖子后,我用 columnDefinition 修改了我的 Entity 类,@Column 注释属性。
@Column(name="SERVICE_NAME",nullable=true,length=16,columnDefinition="CHAR")
public String getServiceName() {
return this.serviceName;
}
但我仍然无法检索相应列的数据。
我还在 columnDefinition 属性中添加了列大小。
@Column(name="SERVICE_NAME",nullable=true,length=16,columnDefinition="CHAR(16)
但我仍然面临同样的问题。 有什么我做错了吗。请帮帮我。
【问题讨论】:
-
当您从 SQL 客户端对数据库手动运行 SQL 时,您是否看到任何返回的行?
-
@EngineerDollery 在抛出上述帖子后,我使用 columnDefinition 和 column annoation 属性修改了我的 Entity 类。
@Column(name="SERVICE_NAME",nullable=true,length=16,columnDefinition="CHAR") public String getServiceName() { return this.serviceName; }但我仍然无法检索相应列的数据。我也在 columnDefinition 属性中添加了列大小。@Column(name="SERVICE_NAME",nullable=true,length=16,columnDefinition="CHAR(16)但我仍然面临同样的问题。有什么我做错了吗。请帮帮我。 -
使用
char几乎总是错误的选择。鉴于您遇到的问题,我很确定您确实想使用varchar。存储数据时,char始终填充到定义的长度。我很确定这不是你想要的。 -
@a_horse_with_no_name 我无法将 serviceName 的类型从 char 更改为 varchar2。因为其他 API(用 C++ 编码)正在使用相同的数据库。我们可以为这个问题提供通用解决方案吗?
标签: oracle hibernate types char hql