JPA(Hibernate)查询不返回有效查询的结果

JPA(Hibernate)查询不返回有效查询的结果,hibernate,jpa,resultset,Hibernate,Jpa,Resultset,环境是: 在W2K8数据中心服务器上运行的SQL Server 2008 在Mac OS X 10.6.8上运行: Hibernate(3),JPA提供商(1.0.1-Final), Spring 3.0.6, 爪哇6 情况是,有一个特定的对象我无法检索结果集。即使是最简单的查询也不起作用,它似乎仅限于这个特定的实体类(InvDetail)。我已记录正在生成的SQL: 休眠: select invdetail0_.invdetailid as invdetai1_28_, invdetail0_

环境是:

在W2K8数据中心服务器上运行的SQL Server 2008

在Mac OS X 10.6.8上运行: Hibernate(3),JPA提供商(1.0.1-Final), Spring 3.0.6, 爪哇6

情况是,有一个特定的对象我无法检索结果集。即使是最简单的查询也不起作用,它似乎仅限于这个特定的实体类(InvDetail)。我已记录正在生成的SQL:

休眠:

select invdetail0_.invdetailid as invdetai1_28_, invdetail0_.description as                                       descript2_28_, invdetail0_.invid as invid28_, invdetail0_.qty as qty28_,     invdetail0_.unitprice as unitprice28_ from INV_DETAIL invdetail0_`
以下是表创建脚本:

CREATE TABLE[dbo]。[INV\u DETAIL](
[INVID][int]不为空,
[INVDETAILID][int]不为空,
[QTY][int]不为空,
[UNITPRICE][smallmoney]不为空,
[说明][varchar](100)不为空,
约束[PK\U INV\U DETAIL]主键群集
(
[INVDETAILID]ASC
)(PAD_INDEX=OFF,STATISTICS_norecomputer=OFF,IGNORE_DUP_KEY=OFF,ALLOW_ROW_LOCKS=ON,ALLOW_PAGE_LOCKS=ON,FILLFACTOR=90)打开[主]
)在[主]上

Java类本身:

    @Entity
@NamedQueries({
  @NamedQuery(name = "InvDetail.findAll", query = "select o from InvDetail o"),
  @NamedQuery(name = "InvDetail.findByHeaderId", query = "SELECT o from InvDetail o WHERE o.invid = :invid")
})
@Table(name = "INV_DETAIL")
public class InvDetail extends SmartBeanItem<InvDetail> implements Serializable {
  @Column(name ="description", nullable = false)
  private String description;
  @Id
  @Column(name="invdetailid",nullable = false)
  private Integer invdetailid;
  @Column(name="invid",nullable = false)
  private Integer invid;
  @Column(name="qty",nullable = false)
  private Integer qty;
  @Column(name="unitprice",nullable = false)
  private BigDecimal unitprice;

  public InvDetail() {
  }

  public InvDetail(String description, Integer invdetailid, Integer invid,
                   Integer qty, BigDecimal unitprice) {
    this.description = description;
    this.invdetailid = invdetailid;
    this.invid = invid;
    this.qty = qty;
    this.unitprice = unitprice;
  }

  public String getDescription() {
    return description;
  }

  public void setDescription(String description) {
    this.description = description;
  }

  public Integer getInvdetailid() {
    return invdetailid;
  }

  public void setInvdetailid(Integer invdetailid) {
    this.invdetailid = invdetailid;
  }

  public Integer getInvid() {
    return invid;
  }

  public void setInvid(Integer invid) {
    this.invid = invid;
  }

  public Integer getQty() {
    return qty;
  }

  public void setQty(Integer qty) {
    this.qty = qty;
  }

  public BigDecimal getUnitprice() {
    return unitprice;
  }

  public void setUnitprice(BigDecimal unitprice) {
    this.unitprice = unitprice;
  }
}
现在值得注意的是,如果您查看日志,将有一个不同的查询来检索一些InvHeader实体。该查询工作得非常好,随后我尝试获取InvDetail。。。无济于事。这似乎只发生在InvDetail中,系统中的所有其他对象似乎都能够被查询到,而没有任何问题

我不知道如何进一步解决这个问题。我已经打开了我认为所有适当的日志记录,但没有发现任何东西可以解释为什么在我要求表中的所有内容时返回0结果


任何帮助都将不胜感激。

我猜应用程序没有使用您认为它使用的数据库或模式。检查数据源/连接池的配置。或者数据在数据库中,但尚未提交。我也一直在这样做。只有一个模式,我已经检查了连接字符串。从其他表检索数据。。。而不是所有使用相同数据源的库存明细表。数据肯定在数据库中,因为它是手动插入的。事实上,JB,你死定了。我仔细看了一下,似乎在某个时候,INV_DETAIL表也是在不同的模式(用户)下创建的。这导致查询查看错误的表。。。有趣的是,有时你花最多时间在的事情是最容易解决的问题。谢谢你的澄清!
<persistence xmlns="http://java.sun.com/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence
http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"
version="2.0">
    <persistence-unit name="imUnit" transaction-type="RESOURCE_LOCAL">
        ...
        <class>com.stuff.portal.portlet.model.ejb.InvHeader</class>
        <class>com.stuff.portal.portlet.model.ejb.InvDetail</class>
        <properties>
            <property name="hibernate.show_sql" value="true" />
            <property name="hibernate.format_sql" value="false" />
            <property name="hibernate.jdbc.batch_size" value="100" />
        </properties>
    </persistence-unit>
TypedQuery<InvDetail> q = em.createNamedQuery("InvDetail.findAll", InvDetail.class);
// q.setParameter("invid", invid);
List<InvDetail> result = q.getResultList();
DEBUG [http-8080-6] (JpaTransactionManager.java:355) - Exposing JPA transaction as JDBC transaction [org.springframework.orm.jpa.vendor.HibernateJpaDialect$HibernateConnectionHandle@23b76287]
DEBUG [http-8080-6] (ExtendedEntityManagerCreator.java:423) - Starting resource local transaction on application-managed EntityManager [org.hibernate.ejb.EntityManagerImpl@37975a46]
DEBUG [http-8080-6] (ExtendedEntityManagerCreator.java:400) - Joined local transaction
DEBUG [http-8080-6] (ExtendedEntityManagerCreator.java:400) - Joined local transaction
Hibernate: select invheader0_.invid as invid27_, invheader0_.exchangerate as exchange2_27_, invheader0_.incotermlocation as incoterm3_27_, invheader0_.incotermsid as incoterm4_27_, invheader0_.invcurrencyid as invcurre5_27_, invheader0_.invno as invno27_, invheader0_.invoicedate as invoiced7_27_, invheader0_.orgid as orgid27_, invheader0_.paymentstatusid as payments9_27_, invheader0_.paymenttermid as payment10_27_, invheader0_.paymentterms as payment11_27_, invheader0_.revisionnumber as revisio12_27_, invheader0_.supplierid as supplierid27_, invheader0_.surcharge as surcharge27_, invheader0_.tax as tax27_ from INV_HEADER invheader0_ where 1=1
DEBUG [http-8080-6] (AbstractPlatformTransactionManager.java:752) - Initiating transaction commit
DEBUG [http-8080-6] (JpaTransactionManager.java:462) - Committing JPA transaction on EntityManager [org.hibernate.ejb.EntityManagerImpl@79ae52b2]
DEBUG [http-8080-6] (JpaTransactionManager.java:548) - Closing JPA EntityManager [org.hibernate.ejb.EntityManagerImpl@79ae52b2] after transaction
DEBUG [http-8080-6] (EntityManagerFactoryUtils.java:328) - Closing JPA EntityManager
DEBUG [http-8080-6] (AbstractBeanFactory.java:244) - Returning cached instance of singleton bean 'inventoryManagerTransactionManager'
DEBUG [http-8080-6] (AbstractBeanFactory.java:244) - Returning cached instance of singleton bean 'liferayTransactionManager'
DEBUG [http-8080-6] (AbstractPlatformTransactionManager.java:365) - Creating new transaction with name [com.stuff.portal.portlet.service.impl.InventoryManagerServiceImpl.getDetailsForInvoice]: PROPAGATION_NESTED,ISOLATION_DEFAULT; 'inventoryManagerTransactionManager'
DEBUG [http-8080-6] (JpaTransactionManager.java:323) - Opened new EntityManager [org.hibernate.ejb.EntityManagerImpl@50b97081] for JPA transaction
DEBUG [http-8080-6] (JpaTransactionManager.java:355) - Exposing JPA transaction as JDBC transaction [org.springframework.orm.jpa.vendor.HibernateJpaDialect$HibernateConnectionHandle@3e894e8e]
DEBUG [http-8080-6] (ExtendedEntityManagerCreator.java:423) - Starting resource local transaction on application-managed EntityManager [org.hibernate.ejb.EntityManagerImpl@37975a46]
DEBUG [http-8080-6] (ExtendedEntityManagerCreator.java:400) - Joined local transaction
22:38:51,519 WARN  [ThemeLocalServiceImpl:121] No theme found for specified theme id clear_WAR_cleartheme. Returning the default theme.
22:38:51,521 WARN  [ThemeLocalServiceImpl:121] No theme found for specified theme id clear_WAR_cleartheme. Returning the default theme.
Hibernate: select invdetail0_.invdetailid as invdetai1_28_, invdetail0_.description as descript2_28_, invdetail0_.invid as invid28_, invdetail0_.qty as qty28_, invdetail0_.unitprice as unitprice28_ from INV_DETAIL invdetail0_
DEBUG [http-8080-6] (AbstractPlatformTransactionManager.java:752) - Initiating transaction commit
DEBUG [http-8080-6] (JpaTransactionManager.java:462) - Committing JPA transaction on EntityManager [org.hibernate.ejb.EntityManagerImpl@50b97081]
DEBUG [http-8080-6] (JpaTransactionManager.java:548) - Closing JPA EntityManager [org.hibernate.ejb.EntityManagerImpl@50b97081] after transaction
DEBUG [http-8080-6] (EntityManagerFactoryUtils.java:328) - Closing JPA EntityManager