0

Hibernate-3Spring Frameworkに基づいて Java アプリケーションを作成したい。プロセスを簡単にするために、既存のデータベースのリバース エンジニアリングを実行できるhibernate3-maven-pluginを見つけました。
ここにPOMの例があります:

<plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>hibernate3-maven-plugin</artifactId>
    <version>2.2</version>
    <configuration>
        <components>
            <component>
                <name>hbm2java</name>
                <outputDirectory>src/main/java</outputDirectory>
                <implementation>jdbcconfiguration</implementation>
            </component>
            <component>
                <name>hbm2dao</name>
                <outputDirectory>src/main/java</outputDirectory>
                <implementation>jdbcconfiguration</implementation>
            </component>
        </components>
        <componentProperties>
            <revengfile>/src/main/resources/model.reveng.xml</revengfile>
            <propertyfile>/src/main/resources/hibernate.properties</propertyfile>
            <jdk5>true</jdk5>
            <ejb3>true</ejb3>
        </componentProperties>
    </configuration>
    <dependencies>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.18</version>
        </dependency>
        <dependency>
            <groupId>cglib</groupId>
            <artifactId>cglib-nodep</artifactId>
            <version>2.1_3</version>
        </dependency>
    </dependencies>
    <executions>
        <execution>
            <phase>compile</phase>
            <goals>
                <goal>hbm2java</goal>
                <goal>hbm2dao</goal>
            </goals>
        </execution>
    </executions>
</plugin>  

次に、Spring のコンテキストをセットアップします。

<?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xsi:schemaLocation="http://www.springframework.org/schema/beans
            http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">

        <bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalEntityManagerFactoryBean">
            <property name="persistenceUnitName" value="gomer" />
        </bean>

        <bean id="entityManager" factory-bean="entityManagerFactory" factory-method="createEntityManager"/>

        <bean id="user" class="ru.tomtrix.first.db.UserHome">
            <property name="entityManager" ref="entityManager"/>
        </bean>
    </beans>

以下を除いて、EntityファイルとDAOファイルを完全に生成します。DAO ファイルには EntityManager があります。

@Stateless
public class UserHome {

    private static final Log log = LogFactory.getLog(UserHome.class);

    @PersistenceContext private EntityManager entityManager;  

...そして、このフィールドにはセッターがありません! 最終的に、Spring は例外をスローします。

Invalid property 'entityManager' of bean class [ru.tomtrix.first.db.UserHome]: Bean property 'entityManager' is not writable or has an invalid setter method. Does the parameter type of the setter match the return type of the getter?

もちろん、setter を手動で記述することはお勧めできません。マネージャーを適切に注入する方法があると思います。では、生成されたファイルを書き換えずにそれを行うにはどうすればよいでしょうか?

対応する情報:
1) スタンドアロン アプリケーションを作成したい (Tomcat などのアプリケーション サーバーで実行したい)
2) model.reveng.xml:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-reverse-engineering SYSTEM "http://www.hibernate.org/dtd/hibernate-reverse-engineering-3.0.dtd">
<hibernate-reverse-engineering>
    <table-filter match-name=".*" package="ru.tomtrix.first.db"/>
</hibernate-reverse-engineering>  

3) 持続性.xml:

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="1.0" 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_1_0.xsd">

    <persistence-unit name="gomer" transaction-type="RESOURCE_LOCAL">
        <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
        <class>User</class>
        <properties>
            <property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5Dialect"/>
            <property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver"/>
            <property name="hibernate.show_sql" value="true"/>
            <property name="hibernate.connection.username" value="root"/>
            <property name="hibernate.connection.password" value="1234"/>
            <property name="hibernate.connection.url" value="jdbc:mysql://localhost:3306/users"/>
        </properties>
    </persistence-unit>
</persistence>
4

1 に答える 1

0

問題は、構成の一部が欠落していることです。構成にアノテーションを (また) 使用することを Spring に伝える必要があります。このために、構成に を追加し<context:annotation-config />、の設定を削除します。entityManager

次に、ファクトリ メソッド spring の呼び出しを削除すると、すべてが処理されます。

の代わりにバージョンレススキーマを使用するヒントを追加

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="
       http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
       http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">

    <context:annotation-config />

    <bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalEntityManagerFactoryBean">
        <property name="persistenceUnitName" value="gomer" />
    </bean>

    <bean id="user" class="ru.tomtrix.first.db.UserHome" />

</beans>

コードを本格的なアプリ サーバーにデプロイすると問題が発生する可能性があり、Spring と EJB コンテナーが Bean の制御をめぐって競合する問題が発生する可能性があります。休止状態プラグインは@Stateless、一般にアプリによって取得されるセッション Bean を生成します。サーバー(使用するサーバーによって異なります)。

于 2014-02-10T07:19:04.880 に答える