【问题标题】:Criteria list returning empty list but there are rows in oracle db条件列表返回空列表,但 oracle db 中有行
【发布时间】:2015-05-26 19:56:06
【问题描述】:

我在 oracle Thin 11 g 上运行 sql 语句“SELECT * FROM company”,它返回 3 行。

我已经正确配置了数据源并尝试了如下的查询以及标准,即使它们应该返回 3 行,它们也没有返回任何内容。 //import org.hibernate.Criteria;

1。 标准

 Criteria criteria = session.createCriteria(Company.class);
            criteria
                     .add(Restrictions.eq("companyName", companyName))
                     .add(Restrictions.eq("companyId", companyId));

List<Company> companyList  = criteria.list();//**THIS RETURNS 0 ROWS**

2。 查询

Query query=session.createQuery("from Company where companyName= :companyName and companyId= :companyId");

           query.
                   setParameter("companyId",companyId).
                   setParameter("companyName", companyName);

List<Company> companyList  = query.list();//**THIS RETURNS 0 ROWS**

3.查询中的SQL

Query query=session.createSQLQuery("SELECT * FROM Company");
List<Company> CompanyList  = query.list();//**THIS RETURNS 0 ROWS**

这里是公司实体

//javax.persistence.*;

@Entity
@Table(name = "COMPANY")
public class Company {

    @Id
    @GeneratedValue(strategy= GenerationType.SEQUENCE, generator="COMPANY_SEQ")
    @SequenceGenerator(name="COMPANY_SEQ", sequenceName="COMPANY_SEQ",   allocationSize=1)
    @Column(name = "COMPANY_ID")
    int CompanyId;

    @Basic
    @Column (name ="COMPANY_NAME")
    private String companyName;


    @Basic
    @Column (name ="COMPANY_ID")
    private Integer companyId;// The login id of user whose data is updated

    @Basic
    @Column (name ="UPDATED_BY")
    private String updatedBy;

    @Basic
    @Column (name ="UPDATE_DATE")
    private Date updateDate;

     //Default no-arg constructor and another constructor with all the fields.
    //default getters and Setters
}

我错过了什么,为什么不是所有的休眠查询都没有返回行?感谢您的帮助。

【问题讨论】:

  • 可能是因为您正在连接到不同的数据库/模式,或者因为数据已插入,但尚未提交。
  • @JBNizet 我已经运行了 SELECT * FROM company 并重新调整了 SQL Developer 上的行。所以我知道数据已提交。
  • 一个事务会看到它自己的变化,即使这个事务还没有提交。其他并发事务不会看到第一个事务的未提交更改。这就是事务隔离的原则(至少设置为 READ_COMMITTED 时)。在 SQL 开发人员中执行commit;以确保。
  • @JBNizet 我只是脱帽致谢!!
  • 我刚刚添加了您的回复作为答案,以防其他人遇到同样的问题。随意编辑它!

标签: java oracle hibernate hql criteria


【解决方案1】:

感谢@JBNizet 对我的问题的评论。问题是我没有在 SQL Developer 中提交数据。

确保在您使用的 DB Developer 上“提交”事务。

这是来自@JBNizet 的确切评论

一个事务会看到它自己的变化,即使这个事务不是 承诺了。其他并发事务不会看到未提交的 第一笔交易的变化。这就是交易的原则 隔离(至少设置为 READ_COMMITTED 时)。执行 commit; 在 SQL 开发人员中确定。 ——

【讨论】:

    【解决方案2】:

    我遇到了同样的问题。我只是忘记在 hibernate.cfg.xml 中添加映射类。 我做到了,效果很好

    【讨论】:

      猜你喜欢
      • 2020-10-15
      • 2019-02-04
      • 1970-01-01
      • 1970-01-01
      • 2014-09-16
      • 2022-07-21
      • 2013-11-27
      • 1970-01-01
      • 2017-04-01
      相关资源
      最近更新 更多