@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;
}
}
@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;
}
}
请帮助我解决这个问题。这里我不能将Oracle类型char更改为varchar2。我需要使用oracle char类型变量。
@EngineerDollery在抛出上面的帖子之后,我用columnDefinition修改了实体类,@column
注释属性。
@Column(name="SERVICE_NAME",nullable=true,length=16,columnDefinition="CHAR")
public String getServiceName() {
return this.serviceName;
}
但我仍然无法检索相应列的数据。
我使用OraclePreparedStatement和Hibernate UserType接口解决了这个问题。
通过扩展org.hibernate.UserType.UserType接口创建了一个新的UserType类,并提供了nullSafeSet()、nullSafeGet()方法的实现。
nullSafeSet()方法,我们有第一个参数为PreparedStatement,在方法内部,我将PreparedStatement转换为OraclePreparedStatement对象,并使用setFixedCHAR()方法传递字符串值。
这里是UserType impl类的完整代码。
package nc3.jws.persistence.userType;
import java.io.Serializable;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Types;
import org.apache.commons.lang.StringUtils;
import org.hibernate.type.StringType;
import org.hibernate.usertype.UserType;
/**
*
* based on www.hibernate.org/388.html
*/
public class OracleFixedLengthCharType implements UserType {
public OracleFixedLengthCharType() {
System.out.println("OracleFixedLengthCharType constructor");
}
public int[] sqlTypes() {
return new int[] { Types.CHAR };
}
public Class<String> returnedClass() {
return String.class;
}
public boolean equals(Object x, Object y) {
return (x == y) || (x != null && y != null && (x.equals(y)));
}
@SuppressWarnings("deprecation")
public Object nullSafeGet(ResultSet inResultSet, String[] names, Object o) throws SQLException {
//String val = (String) Hibernate.STRING.nullSafeGet(inResultSet, names[0]);
String val = StringType.INSTANCE.nullSafeGet(inResultSet, names[0]);
//System.out.println("From nullSafeGet method valu is "+val);
return val == null ? null : StringUtils.trim(val);
}
public void nullSafeSet(PreparedStatement inPreparedStatement, Object o,
int i)
throws SQLException {
String val = (String) o;
//Get the delegatingStmt object from DBCP connection pool PreparedStatement object.
org.apache.commons.dbcp.DelegatingStatement delgatingStmt = (org.apache.commons.dbcp.DelegatingStatement)inPreparedStatement;
//Get OraclePreparedStatement object using deletatingStatement object.
oracle.jdbc.driver.OraclePreparedStatement oraclePreparedStmpt = (oracle.jdbc.driver.OraclePreparedStatement)delgatingStmt.getInnermostDelegate();
//Call setFixedCHAR method, by passing string type value .
oraclePreparedStmpt.setFixedCHAR(i, val);
}
public Object deepCopy(Object o) {
if (o == null) {
return null;
}
return new String(((String) o));
}
public boolean isMutable() {
return false;
}
public Object assemble(Serializable cached, Object owner) {
return cached;
}
public Serializable disassemble(Object value) {
return (Serializable) value;
}
public Object replace(Object original, Object target, Object owner) {
return original;
}
public int hashCode(Object obj) {
return obj.hashCode();
}
}
在Entity类中使用@TypeDefs批注配置了此类。
@TypeDefs({
@TypeDef(name = "fixedLengthChar", typeClass = nc3.jws.persistence.userType.OracleFixedLengthCharType.class)
})
@Type(type="fixedLengthChar")
@Column(name="SERVICE_NAME",nullable=true,length=16)
public String getServiceName() {
return this.serviceName;
}
tickets集合中的字段称为“category”,其字段类型为。 在下面的代码中,是我要查询的类别的文档ID。 为什么返回0? 为了进行测试,我将字段类型更改为string,并将其设置为类别ID,而不是直接引用。这正确地返回了分配给类别的票证,这使我相信这是关于我如何查询字段的。
问题内容: 我正在阅读oracle的基础知识,并遇到了奇怪的陈述。我不知道这是真的。 声明说 “字符串值‘2’大于字符串值‘100’。字符‘1’小于字符‘10’。” 请就上述话题发表一些看法。我了解必须使用ASCII值进行内部比较。我正在寻求一些合理的解释。 问题答案: 这意味着被视为字符串的数字不是按 数字顺序 而是按 词汇顺序排序 ,这与字典中单词的排序方式相同。即,从左侧一次比较一个字符。
问题内容: 也许这听起来有点疯狂,但是我需要提出一个查询以仅从字母数字字段中检索字母。 例如: 表 1234ADD 3901AC 1812OPA 82711AUU 结果预期 ADD AC OPA AUU 谢谢! 问题答案: 看来您只想删除数字。您可以在10g或11g中使用:
问题内容: 使用oracle SQL时,是否可以基于子查询中的text_string运行查询?一个例子可以阐明我要做什么 外部查询旨在计算从query_table中检索到的每个查询的结果数。 有什么方法可以执行在同一查询中从query_table中检索到的sql语句? 谢谢 编辑:我能够使用dbms_xmlgen.get_xml()函数从表中查询sql。我想任何导致sql被解析和执行的命令都可以工
官方文档:https://docs.oracle.com/en/database/oracle/oracle-database/19... 图片: number(m,n)里,m是包括整数和小数部分的总位数吧,如果总位数限制为2,那小数位数限制为7有什么意义呢? 如果红框的值是0.9999912,那stored as的值是多少?
在我删除索引之后。php,我在codeigniter中启用查询字符串。但我有一些重定向链接的问题。详细信息,我有登录表单(登录/索引),登录成功时重定向到“欢迎/索引”,并在会话中保存电子邮件。 但是登录成功时只加载视图的"欢迎/索引"和错误的链接,现在链接是:"?登录/索引"并且会话不保存。请帮帮我。 这是我的密码 登录。php(控制器) Welcome.php(控制器) 欢迎留言。php(视图