11

私はspring-data-jpaを初めて使用し、現在hibernateで実装しようとしています。私はチュートリアルに従いました!このため、現在、アプリケーション自体の起動に関する問題に直面しています。起動時に次の例外が発生します。

 Caused by: org.springframework.data.mapping.PropertyReferenceException: No property customer found for type com.adaptris.dashboard.customer.Customer
at org.springframework.data.mapping.PropertyPath.<init>(PropertyPath.java:74)
at org.springframework.data.mapping.PropertyPath.create(PropertyPath.java:326)
at org.springframework.data.mapping.PropertyPath.create(PropertyPath.java:352)
at org.springframework.data.mapping.PropertyPath.create(PropertyPath.java:306)
at org.springframework.data.mapping.PropertyPath.from(PropertyPath.java:270)
at org.springframework.data.mapping.PropertyPath.from(PropertyPath.java:244)
at org.springframework.data.repository.query.parser.Part.<init>(Part.java:73)
at org.springframework.data.repository.query.parser.PartTree$OrPart.<init>(PartTree.java:180)
at org.springframework.data.repository.query.parser.PartTree$Predicate.buildTree(PartTree.java:260)
at org.springframework.data.repository.query.parser.PartTree$Predicate.<init>(PartTree.java:240)
at org.springframework.data.repository.query.parser.PartTree.<init>(PartTree.java:71)
at org.springframework.data.jpa.repository.query.PartTreeJpaQuery.<init>(PartTreeJpaQuery.java:57)
at org.springframework.data.jpa.repository.query.JpaQueryLookupStrategy$CreateQueryLookupStrategy.resolveQuery(JpaQueryLookupStrategy.java:90)
at org.springframework.data.jpa.repository.query.JpaQueryLookupStrategy$CreateIfNotFoundQueryLookupStrategy.resolveQuery(JpaQueryLookupStrategy.java:162)
at org.springframework.data.jpa.repository.query.JpaQueryLookupStrategy$AbstractQueryLookupStrategy.resolveQuery(JpaQueryLookupStrategy.java:68)
at org.springframework.data.repository.core.support.RepositoryFactorySupport$QueryExecutorMethodInterceptor.<init>(RepositoryFactorySupport.java:280)
at org.springframework.data.repository.core.support.RepositoryFactorySupport.getRepository(RepositoryFactorySupport.java:148)
at org.springframework.data.repository.core.support.RepositoryFactoryBeanSupport.getObject(RepositoryFactoryBeanSupport.java:125)
at org.springframework.data.repository.core.support.RepositoryFactoryBeanSupport.getObject(RepositoryFactoryBeanSupport.java:41)
at org.springframework.beans.factory.support.FactoryBeanRegistrySupport.doGetObjectFromFactoryBean(FactoryBeanRegistrySupport.java:142)

顧客は私のドメインクラスであり、

@Entity(name = "customer")

そして、DBに接続して、実際に構成した顧客テーブルをフェッチしようとしていると思います。これが私のspring-configです:

<tx:annotation-driven transaction-manager="transactionManager" />
<!-- Activate Spring Data JPA repository support -->
<jpa:repositories base-package="com.adaptris.dashboard.customer" />

    <!-- Declare a datasource that has pooling capabilities -->
<bean id="jpaDataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"
    destroy-method="close" p:driverClass="${app.jdbc.driverClassName}"
    p:jdbcUrl="${app.jdbc.url}" p:user="${app.jdbc.username}" p:password="${app.jdbc.password}"
    p:acquireIncrement="5" p:idleConnectionTestPeriod="60" p:maxPoolSize="100"
    p:maxStatements="50" p:minPoolSize="10" />

<!-- Declare a JPA entityManagerFactory -->
<bean id="entityManagerFactory"
    class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"
    p:persistenceXmlLocation="classpath*:META-INF/persistence.xml"
    p:persistenceUnitName="hibernatePersistenceUnit" p:dataSource-ref="jpaDataSource"
    p:jpaVendorAdapter-ref="hibernateVendor" />

<!-- Specify our ORM vendor -->
<bean id="hibernateVendor"
    class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"
    p:showSql="false" />

<!-- Declare a transaction manager -->
<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager"
    p:entityManagerFactory-ref="entityManagerFactory" />

そして、DBは実行中のMYSQLです。プロパティは次のとおりです。

# database properties
app.jdbc.driverClassName=com.mysql.jdbc.Driver
app.jdbc.url=jdbc\:mysql\://Mallik-PC/adaptrisschema
app.jdbc.username=dbuser
app.jdbc.password=dbpassword

この問題から抜け出すのを手伝ってください!

4

3 に答える 3

39

Domain クラスに指定した Repository インターフェイスにはfindXXXメソッドが含まれているようですが、Domain クラスXXXのプロパティではありません。

例:

public interface UserRepository extends CrudRepository<User, String> {

    /**
     * Finds a user by name.
     * 
     * @param name The name of the User to find.
     * @return The User with the given name.
     */
    public User findByName(String name);
}

また、ドメイン クラスは次のようになり、「name」プロパティがありません。

@Entity
public class User {
    private String firstname;
    private String lastname;
    // No "private String name" in here!
    ... 
}

findByCustomer(Customer customer)あなたの特定の例では、Repository インターフェイスにメソッドを追加したように見えます (おそらく のようなものと呼ばれますCustomerRepository)。findOne(<PrimaryKeyClass> id)メソッドはSpring Data for JPAによって自動的に生成されるため、そのメソッドは必要ありません。@IdドメインクラスCustomerの をパラメーターとして呼び出すだけです。

于 2013-01-21T17:55:12.110 に答える
1

私の場合、Spring の大文字と小文字が区別されるため、このエラーに苦労しました。ドメイン クラスの宣言をファースト ネームとして、ファースト ネームで検索ました。

@Entity
public class User {
    private String firstName;
...

findByFirstnameこのエラーが発生したときに find メソッドが宣言されたためです。文字nNに変更すると機能します。

public Collection<User> findByFirstName(@Param("firstName") String firstname);
于 2014-11-25T17:15:47.483 に答える
1

Spring ORM LocalContainerEntityManagerFactoryBean(3.1 以降だと思います) には、「packagesToScan」というプロパティがあります。persistence.xml を使用して設定する追加のベンダー プロパティがない限り、を削除しp:persistenceXmlLocationて置き換えます。

p:packagesToScan="[package name where your entities are]"

これは、LocalContainerEntityManagerFactoryBeanすべての@Entitypojo を見つける場所を示し、それらを EntityManagerFactory に含めて、Spring Data JPA が「顧客」を置く場所を見つけることができるようにします

于 2013-01-14T12:27:56.897 に答える