2014-12-01 173 views
0

我有一个postgree数据库。还有spring + hibernate。当我不想通过任何标准获取实体时,它会返回我的长度列表。看起来像某些依赖被遗漏,或像实体一样被识别为实体。无法从数据库获取实体

我Maven的配置: ...

<spring.version>4.0.3.RELEASE</spring.version> 
    <hibernate.version>3.6.9.Final</hibernate.version> 
.... 
<!-- Spring framework --> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-core</artifactId> 
     <version>${spring.version}</version> 
    </dependency> 

    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-context</artifactId> 
     <version>${spring.version}</version> 
    </dependency> 

    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-web</artifactId> 
     <version>${spring.version}</version> 
    </dependency> 

    <!--Spring and Transactions--> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-tx</artifactId> 
     <version>${spring.version}</version> 
    </dependency> 

    <!-- Spring ORM support --> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-orm</artifactId> 
     <version>${spring.version}</version> 
    </dependency> 

    <!-- Hibernate --> 
    <dependency> 
     <groupId>org.hibernate</groupId> 
     <artifactId>hibernate-entitymanager</artifactId> 
     <version>${hibernate.version}</version> 
    </dependency> 
    <dependency> 
     <groupId>org.hibernate</groupId> 
     <artifactId>hibernate-core</artifactId> 
     <version>${hibernate.version}</version> 
    </dependency> 
    <dependency> 
     <groupId>postgresql</groupId> 
     <artifactId>postgresql</artifactId> 
     <version>9.1-901.jdbc4</version> 
    </dependency> 

我的Spring配置

<context:component-scan base-package="com.helper.api,com.helper.db.model"/> 

<bean id="eyeDataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> 
    <property name="driverClassName" value="${db.driver}"/> 
    <property name="url" value="${db.url}"/> 
    <property name="username" value="${db.user}"/> 
    <property name="password" value="${db.password}"/> 
</bean> 

<bean id="hibernate3AnnotatedSessionFactory" 
     class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean"> 
    <property name="dataSource" ref="eyeDataSource" /> 
    <property name="annotatedPackages"> 
     <list> 
      <value>com.helper.db.model</value> 
     </list> 
    </property> 
    <property name="hibernateProperties"> 
     <props> 
      <prop key="hibernate.dialect">org.hibernate.dialect.PostgreSQLDialect</prop> 
      <prop key="hibernate.current_session_context_class">thread</prop> 
      <prop key="hibernate.show_sql">true</prop> 
      <prop key="hibernate.connection.url">jdbc:postgresql://localhost:5432/xxxxxxxxx_db</prop> 
      <prop key="hibernate.connection.driver_class">org.postgresql.Driver</prop> 
      <prop key="hibernate.connection.username">xxxxxxxxx</prop> 
      <prop key="hibernate.connection.password">qwerty123</prop> 
     </props> 
    </property> 
</bean> 

所以问题是

session.createSQLQuery("SELECT * FROM account").list() 

这是返回正确的数据。我在桌上有1条记录。这是返回 但它是简单的SQL。当我改变它等于标准

session.createCriteria(AccountEntity.class).list() 

它没有任何回报我什么。 AccountEntity:

@Entity 
@Table(name = "account", schema = "public", catalog = "XXXXXXXX_db") 
public class AccountEntity { 
    private int mId; 
    private String mName; 
    private String mPassword; 
    private Collection<AccountInProductEntity> mAccountInProductsById; 
    private Collection<ProductEntity> mProductsById; 

    @Id 
    @Column(name = "id", nullable = false, insertable = true, updatable = true) 
    public int getId() { 
     return mId; 
    } 

    public void setId(int id) { 
     mId = id; 
    } 

    @Basic 
    @Column(name = "name", nullable = false, insertable = true, updatable = true, length = 250) 
    public String getName() { 
     return mName; 
    } 

    public void setName(String name) { 
     mName = name; 
    } 

    @Basic 
    @Column(name = "password", nullable = false, insertable = true, updatable = true, length = 50) 
    public String getPassword() { 
     return mPassword; 
    } 

    public void setPassword(String password) { 
     mPassword = password; 
    } 

    @Override 
    public boolean equals(Object o) { 
     .... 
    } 

    @Override 
    public int hashCode() { 
     .... 
    } 

    @OneToMany(mappedBy = "accountByAccountId") 
    public Collection<AccountInProductEntity> getAccountInProductsById() { 
     return mAccountInProductsById; 
    } 

    public void setAccountInProductsById(Collection<AccountInProductEntity> accountInProductsById) { 
     mAccountInProductsById = accountInProductsById; 
    } 

    @OneToMany(mappedBy = "accountByOwnerId") 
    public Collection<ProductEntity> getProductsById() { 
     return mProductsById; 
    } 

    public void setProductsById(Collection<ProductEntity> productsById) { 
     mProductsById = productsById; 
    } 
} 

回答

0

我的错误是在Spring配置 我用

<property name="annotatedPackages"> 
     <list> 
      <value>com.tac.helper.db.model</value> 
     </list> 
    </property> 

代替

<property name="packagesToScan"> 
     <list> 
      <value>com.tac.helper.db.model</value> 
     </list> 
    </property> 
+0

您可以标记你的答案是正确的,所以可以证明了一个问题,在回答搜索。 – 2014-12-02 10:38:13

+0

是的,会在2天内完成,stackowerflow策略 – 2014-12-02 13:03:38