0

異なるエンティティ間の関係を正しく確立しようとしています。

コードを見ると、すべて問題なく一貫していると思います (プロパティが Hibernate マッピング構成ファイルで確立されたものと同じ名前であることを確認しました) が、コンパイルされません。したがって、OKではないことは明らかです。表示されるエラーは次のとおりです。

org.springframework.beans.factory.BeanCreationException: Error creating
bean with name 'org.springframework.dao.annotation.
PersistenceExceptionTranslationPostProcessor#0' defined in class path
resource [spring.cfg.xml]: Initialization of bean failed; nested 
exception is org.springframework.beans.factory.BeanCreationException: 
Error creating bean with name 'sessionFactory' defined in class path
resource [spring.cfg.xml]: Invocation of init method failed; nested
exception is org.hibernate.HibernateException: Unable to instantiate
default tuplizer [org.hibernate.tuple.entity.PojoEntityTuplizer]

pom.xml ファイルは次のとおりです。

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.igalia.mswl</groupId>
<artifactId>snippr</artifactId>
<packaging>war</packaging>
<version>1.0-SNAPSHOT</version>
<name>snippr Maven Webapp</name>
<url>http://maven.apache.org</url>

<!-- =================================================================== -->
<!-- Default values for properties.These default values are expected to
    be valid for most profiles.Specific profiles can overwrite values when necessary. -->
<properties>
    <!-- Data source properties -->
    <dataSource.user>test</dataSource.user>
    <dataSource.password>test</dataSource.password>
    <dataSource.jndiName>jdbc/testdb</dataSource.jndiName>
    <testDataSource.user>${dataSource.user}</testDataSource.user>
    <testDataSource.password>${dataSource.password}</testDataSource.password>
    <org.springframework.version>3.0.5.RELEASE</org.springframework.version>
    <spring-security.version>3.0.5.RELEASE</spring-security.version>
</properties>

<!-- =================================================================== -->
<!-- Profiles. * The build is always executed by selecting at least two
    non-exclusive profiles. By default, such profiles are "dev" and "postgresql"
    (meaning "use PostgreSQL assuming a development environment"). * General
    profiles. There are two general (database-independent) profiles: "dev" and
    "prod". The former is used for development (including testing) and the latter
    is used for production (including testing). As shown below, two dataSources
    (databases schemas) are used in both profiles: one for running (dataSource)
    and another one for the Maven test fase (testDataSource). Note the Maven
    test fase is executed both with development and production profiles. * Database-specific
    profiles. There is a profile for each supported database. * Specific profiles
    can be defined to better adapt to a particular environment by overwriting/adding
    properties and/or including other chunks of valid XML. * Usage: + mvn <<goal>>
    => Execute <<goal>> with default profiles. + mvn -Pdev,<<database>> <<goal>
    => Execute <<goal>> with "dev" and <<database>> profiles. + mvn -Pprod,<<database>>
    <<goal>> => Execute <<goal>> with "prod" and <<database>> profiles. + Note
    that when using -P option all desired profiles must be specified (e.g. "-Pprod"
    with the intention to select "prod" and the default database profile is not
    correct; "-Pprod,<<database>>" must be used instead). * Examples: + mvn <<goal>>
    + mvn -Ppostgresql,prod <<goal>> + mvn -Ppostgresql,dev <<goal>> -->

<profiles>
    <!-- Development profile -->
    <profile>
        <id>dev</id>
        <activation>
            <activeByDefault>true</activeByDefault>
        </activation>
        <properties>
            <!-- SnippR environment properties -->
            <snippr.mode>dev</snippr.mode>
            <!-- Hibernate properties -->
            <hibernate.show_sql>true</hibernate.show_sql>
            <hibernate.format_sql>true</hibernate.format_sql>
            <hibernate.use_sql_comments>true</hibernate.use_sql_comments>
            <hibernate.hbm2ddl.auto>update</hibernate.hbm2ddl.auto>
        </properties>
    </profile>

    <!-- MySQL profile -->
    <profile>
        <id>mysql</id>
        <properties>
            <!-- JDBC driver properties -->
            <jdbcDriver.groupId>mysql</jdbcDriver.groupId>
            <jdbcDriver.artifactId>mysql-connector-java</jdbcDriver.artifactId>
            <jdbcDriver.version>5.0.5</jdbcDriver.version>
            <jdbcDriver.className>com.mysql.jdbc.Driver</jdbcDriver.className>
            <!-- Data source properties -->
            <dataSource.url>jdbc:mysql://localhost/testdb</dataSource.url>
            <!-- Hibernate properties -->
            <hibernate.dialect>org.hibernate.dialect.MySQLInnoDBDialect</hibernate.dialect>
        </properties>
    </profile>

    <!-- PostgreSQL profile -->
    <profile>
        <id>postgresql</id>
        <activation>
            <activeByDefault>true</activeByDefault>
        </activation>
        <properties>
            <!-- JDBC driver properties -->
            <jdbcDriver.groupId>postgresql</jdbcDriver.groupId>
            <jdbcDriver.artifactId>postgresql</jdbcDriver.artifactId>
            <jdbcDriver.version>8.3-603.jdbc4</jdbcDriver.version>
            <jdbcDriver.className>org.postgresql.Driver</jdbcDriver.className>
            <!-- Data source properties -->
            <dataSource.url>jdbc:postgresql://localhost/testdb</dataSource.url>
            <!-- Hibernate properties -->
            <hibernate.dialect>org.hibernate.dialect.PostgreSQLDialect</hibernate.dialect>
            <!-- <databasetable.prefix>public.</databasetable.prefix> -->
        </properties>
    </profile>

</profiles>

<!-- =================================================================== -->
<!-- Repository management -->
<repositories>
    <repository>
        <id>zkoss</id>
        <url>http://mavensync.zkoss.org/maven2/</url>
        <releases>
            <enabled>true</enabled>
        </releases>
    </repository>
    <repository>
        <id>central</id>
        <url>http://repo1.maven.org/maven2</url>
        <releases>
            <enabled>true</enabled>
        </releases>
    </repository>
</repositories>

<!-- =================================================================== -->
<!-- Dependency management -->
<dependencies>

    <!-- JUnit -->
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.4</version>
        <scope>test</scope>
    </dependency>

    <!-- Log4j -->
    <dependency>
        <groupId>log4j</groupId>
        <artifactId>log4j</artifactId>
        <version>1.2.16</version>
    </dependency>

    <!-- ZK -->
    <dependency>
        <groupId>org.zkoss.zk</groupId>
        <artifactId>zk</artifactId>
        <version>5.0.11</version>
    </dependency>
    <dependency>
        <groupId>org.zkoss.zk</groupId>
        <artifactId>zul</artifactId>
        <version>5.0.11</version>
    </dependency>
    <dependency>
        <groupId>org.zkoss.zk</groupId>
        <artifactId>zkplus</artifactId>
        <version>5.0.11</version>
    </dependency>

    <dependency>
        <groupId>org.zkoss.zk</groupId>
        <artifactId>zkspring-core</artifactId>
        <version>3.0</version>
    </dependency>
    <dependency>
        <groupId>org.zkoss.zk</groupId>
        <artifactId>zkspring-security</artifactId>
        <version>3.0</version>
    </dependency>
    <!-- Spring -->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-core</artifactId>
        <version>${org.springframework.version}</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-test</artifactId>
        <version>${org.springframework.version}</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-orm</artifactId>
        <version>${org.springframework.version}</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-web</artifactId>
        <version>${org.springframework.version}</version>
    </dependency>

    <!-- Hibernate -->
    <dependency>
        <groupId>org.apache.geronimo.specs</groupId>
        <artifactId>geronimo-jta_1.0.1B_spec</artifactId>
        <version>1.1.1</version>
    </dependency>

    <dependency>
        <groupId>javassist</groupId>
        <artifactId>javassist</artifactId>
        <version>3.12.1.GA</version>
    </dependency>

    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-core</artifactId>
        <version>3.6.5.Final</version>
    </dependency>

    <!-- AspectJ -->
    <dependency>
        <groupId>org.aspectj</groupId>
        <artifactId>aspectjtools</artifactId>
        <version>1.5.4</version>
    </dependency>

    <!-- JDBC driver -->
    <dependency>
        <groupId>${jdbcDriver.groupId}</groupId>
        <artifactId>${jdbcDriver.artifactId}</artifactId>
        <version>${jdbcDriver.version}</version>
    </dependency>

    <!-- Spring Security -->
    <dependency>
        <groupId>org.springframework.security</groupId>
        <artifactId>spring-security-core</artifactId>
        <version>${spring-security.version}</version>
    </dependency>
    <dependency>
        <groupId>org.springframework.security</groupId>
        <artifactId>spring-security-web</artifactId>
        <version>${spring-security.version}</version>
    </dependency>
    <dependency>
        <groupId>org.springframework.security</groupId>
        <artifactId>spring-security-config</artifactId>
        <version>${spring-security.version}</version>
    </dependency>
    <dependency>
        <groupId>org.springframework.security</groupId>
        <artifactId>spring-security-acl</artifactId>
        <version>${spring-security.version}</version>
    </dependency>
    <dependency>
        <groupId>org.springframework.security</groupId>
        <artifactId>spring-security-taglibs</artifactId>
        <version>${spring-security.version}</version>
    </dependency>
</dependencies>

<build>
    <finalName>snippr</finalName>

    <!-- =============================================================== -->
    <!-- Filtering -->
    <resources>

        <!-- Apply filtering to files matching the following expressions in src/main/resources. -->
        <resource>
            <directory>src/main/resources</directory>
            <filtering>true</filtering>
            <includes>
                <include>*spring.cfg.xml</include>
                <include>*hibernate.cfg.xml</include>
                <include>jetty-env.xml</include>
            </includes>
        </resource>

        <!-- Continue considering resources the files in src/main/resources, but
            without applying filtering. -->
        <resource>
            <directory>src/main/resources</directory>
        </resource>
    </resources>

    <testResources>
        <!-- Apply filtering to files matching the following expressions in src/test/resources. -->
        <testResource>
            <directory>src/test/resources</directory>
            <filtering>true</filtering>
            <includes>
                <include>*spring.cfg-test.xml</include>
                <include>*hibernate.cfg-test.xml</include>
            </includes>
        </testResource>

        <!-- Continue considering resources the files in src/test/resources, but
            without applying filtering. -->
        <testResource>
            <directory>src/test/resources</directory>
        </testResource>
    </testResources>

    <!-- Maven plugin -->
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <configuration>
                <verbose>true</verbose>
                <source>1.6</source>
                <target>1.6</target>
                <encoding>UTF-8</encoding>
            </configuration>
        </plugin>

        <plugin>
            <groupId>org.mortbay.jetty</groupId>
            <artifactId>maven-jetty-plugin</artifactId>
            <version>6.1.18</version>
            <configuration>
                <jettyEnvXml>target/classes/jetty-env.xml</jettyEnvXml>
                <reload>manual</reload>
                <stopPort>9966</stopPort>
                <stopKey>stop</stopKey>

                <!-- Log to the console. -->
                <requestLog implementation="org.mortbay.jetty.NCSARequestLog">
                    <append>true</append>
                </requestLog>
            </configuration>

            <dependencies>
                <dependency>
                    <groupId>${jdbcDriver.groupId}</groupId>
                    <artifactId>${jdbcDriver.artifactId}</artifactId>
                    <version>${jdbcDriver.version}</version>
                </dependency>
            </dependencies>

        </plugin>

    </plugins>

</build>
</project>

Snippr.hbm.xml は次のとおりです。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

<hibernate-mapping package="org.snippr.business.entities" default-access="field">

<!-- User -->
<class name="User" table="users">
    <id name="id" access="property">
        <generator class="native" />
    </id>

    <property name="firstName" column="first_name" />
    <property name="lastName" column="last_name" />
    <property name="username" column="user_name" unique="true" />
    <property name="password" column="password" />
    <property name="email" column="email" />
    <property name="enabled" column="enabled" />
    <property name="accountNonExpired" column="account_non_expired" />
    <property name="credentialsNonExpired" column="credentials_non_expired" />
    <property name="accountNonLocked" column="account_non_locked" />

    <set name="roles" table="users_roles" lazy="false">
        <key column="user_id" />
        <many-to-many column="role_id" entity-name="org.snippr.business.entities.Role" />
    </set>
    <set name="snippets" inverse="true" cascade="all-delete-orphan" >
        <key column="user_id" />
        <one-to-many class="org.snippr.business.entities.Snippet" />
    </set>
    <set name="labels" inverse="true" cascade="all-delete-orphan" >
        <key column="user_id" />
        <one-to-many class="org.snippr.business.entities.Label" />
    </set>
    <set name="comments" inverse="true"  cascade="all-delete-orphan" >
        <key column="user_id" />
        <one-to-many class="org.snippr.business.entities.Comment" />
    </set>
</class>

<!-- Role -->
<class name="Role" table="roles">
    <id name="id" access="property">
        <generator class="native" />
    </id>

    <property name="roleName" column="role_name" />
</class>

<!-- Snippet -->
<class name="Snippet" table="snippet">
    <id name="id" access="property">
        <generator class="native" />
    </id>

    <property name="title" unique="true" />
    <property name="description" />
    <set name="snippetCodes" inverse="true" cascade="all-delete-orphan">
        <key column="snippet_id" />
        <one-to-many class="org.snippr.business.entities.SnippetCode" />
    </set>
    <many-to-one name="user" class="org.snippr.business.entities.User"
        column="user_id" not-null="true" />
    <many-to-one name="label" class="org.snippr.business.entities.Label"
        column="label_id" not-null="true" />
</class>

<!-- SnippetCode -->
<class name="SnippetCode" table="snippet_code">
    <id name="id" access="property">
        <generator class="native" />
    </id>

    <property name="code" unique="false" type="text" />
    <many-to-one name="snippet" class="org.snippr.business.entities.Snippet"
        column="snippet_id" not-null="true" />
</class>

<!-- Label -->
<class name="Label" table="label">
    <id name="id" access="property">
        <generator class="native" />
    </id>

    <property name="name" unique="false" />

    <many-to-one name="user" class="org.snippr.business.entities.User"
        column="user_id" not-null="true" />
    <set name="snippets" inverse="true" cascade="save-update">
        <key column="label_id" />
        <one-to-many class="org.snippr.business.entities.Snippet" />
    </set>
</class>

<!-- Comment -->
<class name="Comment" table="comment">
    <id name="id" access="property">
        <generator class="native" />
    </id>

    <property name="text" column="text"/>
    <property name="email" column="email"/>
    <property name="url" column="url"/>

    <many-to-one name="user" class="org.snippr.business.entities.User"
        column="user_id" not-null="true" />
</class>

</hibernate-mapping>

Maven によってダウンロードされる .jar ファイルは次のとおりです。

  • antlr-2.7.6.jar aopalliance-1.0.jarspectjrt-1.6.8.jar
  • アスペクトjtools-1.5.4.jar アスペクトjweaver-1.6.8.jar bsh-2.0b4.jar
  • commons-collections-3.1.jar commons-fileupload-1.2.1.jar
  • commons-logging-1.1.1.jar dom4j-1.6.1.jar
  • geronimo-jta_1.0.1B_spec-1.1.1.jar
  • hibernate-commons-annotations-3.2.0.Final.jar
  • hibernate-core-3.6.5.Final.jar hibernate-jpa-2.0-api-1.0.0.Final.jar
  • javassist-3.12.1.GA.jar jta-1.1.jar log4j-1.2.16.jar
  • postgresql-8.3-603.jdbc4.jar slf4j-api-1.6.1.jar
  • spring-aop-3.0.3.RELEASE.jar spring-asm-3.0.5.RELEASE.jar
  • spring-beans-3.0.5.RELEASE.jar spring-context-3.0.5.RELEASE.jar
  • spring-context-support-3.0.3.RELEASE.jar
  • spring-core-3.0.5.RELEASE.jar spring-expression-3.0.3.RELEASE.jar
  • spring-jdbc-3.0.5.RELEASE.jar spring-orm-3.0.5.RELEASE.jar
  • spring-security-acl-3.0.5.RELEASE.jar
  • spring-security-config-3.0.5.RELEASE.jar
  • spring-security-core-3.0.5.RELEASE.jar
  • spring-security-taglibs-3.0.5.RELEASE.jar
  • spring-security-web-3.0.5.RELEASE.jar
  • spring-test-3.0.5.RELEASE.jar
  • spring-tx-3.0.5.RELEASE.jar spring-web-3.0.5.RELEASE.jar
  • zcommon-5.0.11.jar zcommons-el-1.1.0.jar zk-5.0.11.jar
  • zkplus-5.0.11.jar zkspring-core-3.0.jar zkspring-security-3.0.jar
  • zul-5.0.11.jar zweb-5.0.11.jar

Java の専門家は、ここで何が起こっているかを確認したり、手がかりを提供したりできますか? 前述のとおり、名前のプロパティを確認しましたが、タイプミスは見当たりません。

4

2 に答える 2

0

ああ、くそ!私は本当に愚かだと感じています。インスタンスのすべてのプロパティを確認したと確信しました。

このバグは、「コメント」と呼ばれるクラスの1つにエラーがあるために発生します。スタックトレースの最新のエラーを読みましたが、スタックトレースを読み続けると、次のことがわかります。

Caused by: org.hibernate.PropertyNotFoundException: field [user] not found on org.snippr.business.entities.Comment
at org.hibernate.property.DirectPropertyAccessor.getField(DirectPropertyAccessor.java:182)
at org.hibernate.property.DirectPropertyAccessor.getField(DirectPropertyAccessor.java:189)
at org.hibernate.property.DirectPropertyAccessor.getField(DirectPropertyAccessor.java:174)
at org.hibernate.property.DirectPropertyAccessor.getGetter(DirectPropertyAccessor.java:197)
at org.hibernate.mapping.Property.getGetter(Property.java:304)
at org.hibernate.tuple.entity.PojoEntityTuplizer.buildPropertyGetter(PojoEntityTuplizer.java:297)
at org.hibernate.tuple.entity.AbstractEntityTuplizer.<init>(AbstractEntityTuplizer.java:155)
at org.hibernate.tuple.entity.PojoEntityTuplizer.<init>(PojoEntityTuplizer.java:77)

コメントクラスにプロパティ'user'はありません。マッピングとクラスCommentの間に矛盾があります。マッピングはプロパティuserを参照していますが、CommentにはプロパティSetusersがありました。クラスが正しくありません(私は間違った意味で1-Nの関係を作成しました)。

于 2012-09-13T07:50:57.090 に答える
0

クラスパスに javassist.jar がない場合、このエラーが発生することがあります。私が見たように、あなたはそれを宣言しました。クラス プロパティのすべてのゲッターとセッターがあることを確認します。

于 2012-09-02T14:46:45.740 に答える