昨天打算把正在开发系统的数据库从mysql切换到Oracle,为了能跨数据库,打算对主键生成策略稍作修改,对实体注释修改如下:@Id
@GeneratedValue(strategy = GenerationType.AUTO, generator="itsc_seq_gen")
@SequenceGenerator(name="itsc_seq_gen", sequenceName="itsc_id_sequence")
@Column(name = "user_id")
private Integer userId;这种方式可以适应多种数据库,同时新建一个sequence,系统启动OK,从日志中可以知道实体映射没有问题。进入登陆界面,输入用户名和密码,系统最终调用DAO接口,是一个泛型接口: public T findByUniqueKey(String keyName, Serializable key) {
//log.debug("read instance by uniquekey - " + keyName + ": " + key);
try {
//System.out.println("Aaron: the entity class is :" + this.entityClass);
DetachedCriteria detachedCriteria = DetachedCriteria.forClass(this.entityClass);
// log.debug("this.objectClass:" + this.objectClass);
detachedCriteria = detachedCriteria.add(Expression.eq(keyName, key));
detachedCriteria.setResultTransformer(CriteriaSpecification.DISTINCT_ROOT_ENTITY);
List<T> list = this.getHibernateTemplate().findByCriteria(
detachedCriteria); // log.debug("list:" + list);
if (list.size() == 0) {
//log.error("not found!");
return null;
} else if (list.size() > 1) {
throw new RuntimeException("RuntimeException:NotUniqueKey");
}
else {
return list.get(0);
}
} catch (RuntimeException e) {
//log.error("readByUniqueKey failed", e);
throw e;
}
}结果当调用this.getHibernateTemplate().findByCriteria时,发现明明数据库中有数据,接口返回却为空。奇怪的是在数据库中运行Hibernate产生的SQL代码,发现可以查询得到一行数据。不知道大家有没有碰到这样的问题,是不是findByCriteria与oracle之间有什么问题?
@GeneratedValue(strategy = GenerationType.AUTO, generator="itsc_seq_gen")
@SequenceGenerator(name="itsc_seq_gen", sequenceName="itsc_id_sequence")
@Column(name = "user_id")
private Integer userId;这种方式可以适应多种数据库,同时新建一个sequence,系统启动OK,从日志中可以知道实体映射没有问题。进入登陆界面,输入用户名和密码,系统最终调用DAO接口,是一个泛型接口: public T findByUniqueKey(String keyName, Serializable key) {
//log.debug("read instance by uniquekey - " + keyName + ": " + key);
try {
//System.out.println("Aaron: the entity class is :" + this.entityClass);
DetachedCriteria detachedCriteria = DetachedCriteria.forClass(this.entityClass);
// log.debug("this.objectClass:" + this.objectClass);
detachedCriteria = detachedCriteria.add(Expression.eq(keyName, key));
detachedCriteria.setResultTransformer(CriteriaSpecification.DISTINCT_ROOT_ENTITY);
List<T> list = this.getHibernateTemplate().findByCriteria(
detachedCriteria); // log.debug("list:" + list);
if (list.size() == 0) {
//log.error("not found!");
return null;
} else if (list.size() > 1) {
throw new RuntimeException("RuntimeException:NotUniqueKey");
}
else {
return list.get(0);
}
} catch (RuntimeException e) {
//log.error("readByUniqueKey failed", e);
throw e;
}
}结果当调用this.getHibernateTemplate().findByCriteria时,发现明明数据库中有数据,接口返回却为空。奇怪的是在数据库中运行Hibernate产生的SQL代码,发现可以查询得到一行数据。不知道大家有没有碰到这样的问题,是不是findByCriteria与oracle之间有什么问题?
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货