0

私はJavaプロジェクトに取り組んでいますが、遭遇した状況で何が起こっているのか混乱しています。

私はmacosxマウンテンライオンを使ってmacで開発しています。私は日食を使用していて、すべてが正しく構成されており、問題なくこの方法で長い間開発してきました。

MySQLとHibernateをHBMマッピングファイルで使用しています。Springを使用して、使用するマッピングファイルを指定することですべてを結び付けています。最近、テーブルに新しい列を追加し、ドメインオブジェクトを更新し、hbmマッピングファイルを更新しようとしました。

今、私はエラーを受け取り始めました:

'フィールドリスト'の不明な列'dateSent'

列がマッピングファイルにあり、列がデータベースとドメインオブジェクトにある場合でも。

次に、それを削除してMavenですべてを再構築しました。コードで列へのすべての参照が削除され、列がデータベースから削除され、列がhbmマッピングファイルから削除されるという、さらに奇妙な問題が発生しています。ただし、Hibernateが列についてエラーをスローしているのを、コードのどこかにまだ存在しているかのように表示していますが、そうではありません。さらに奇妙なことに、Hibernateの出力は、問題の列を含むレコードを挿入しようとする不適切な使用を示していません...以下のエラーを参照してください: "Hibernate:メッセージ(ユーザーID、コンテンツ、場所)の値(?、?、 ?)"..。

これが私が得ているエラーです:

        Hibernate: insert into messages (userid, content, location) values (?, ?, ?)
        18:08:19,154  WARN JDBCExceptionReporter:77 - SQL Error: 1054, SQLState: 42S22
        18:08:19,155 ERROR JDBCExceptionReporter:78 - Unknown column 'dateSent' in 'field list'
        18:08:19,175 ERROR MessageProcessorImpl:724 - org.springframework.dao.InvalidDataAccessResourceUsageException: could not insert: [com.app.domain.Message]; SQL [insert into messages (userid, content, location) values (?, ?, ?)]; nested exception is org.hibernate.exception.SQLGrammarException: could not insert: [com.app.domain.Message]
            at org.springframework.orm.hibernate3.SessionFactoryUtils.convertHibernateAccessException(SessionFactoryUtils.java:629)
        ... 50 more
Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column 'dateSent' in 'field list'
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
    at com.mysql.jdbc.Util.handleNewInstance(Util.java:406)
    at com.mysql.jdbc.Util.getInstance(Util.java:381)
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1030)
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:956)
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3558)
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3490)
    at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1959)
    at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2109)
    at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2643)
    at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:2077)
    at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2362)
    at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2280)
    at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2265)
    at com.mchange.v2.c3p0.impl.NewProxyPreparedStatement.executeUpdate(NewProxyPreparedStatement.java:105)
    at org.hibernate.id.IdentityGenerator$GetGeneratedKeysDelegate.executeAndExtract(IdentityGenerator.java:73)
    at org.hibernate.id.insert.AbstractReturningDelegate.performInsert(AbstractReturningDelegate.java:33)
    ... 66 more

これを引き起こす可能性のある、Hibernateを使用するmysqlデータベースまたはJavaアプリケーション間のキャッシュのようなものはありますか?

コンピューターを再起動し、Mavenクリーン/Mavenインストールを実行してすべてを更新しました。コードでdateSentという文字列を検索しましたが、コード内の単語への参照が見つかりませんでしたが、まだ文句を言っています。

任意の提案をいただければ幸いです。

HBMファイルは次のとおりです。

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="com.app.domain">
    <class name="Message" table="messages" >
        <id name="messageId" column="messageId">
            <generator class="native" />
        </id>
        <property name="userId" column="userId"/>
        <property name="content" column="content"/>
        <property name="location" column="location"/>
    </class>
</hibernate-mapping>

これが私のドメインオブジェクトです:

package com.app.domain;

import java.util.Date;
import java.util.List;

public class Message {
    private long messageId;
    private long userId;
    private String content;
    private String location;

    public long getMessageId() {
        return messageId;
    }
    public void setMessageId(long messageId) {
        this.messageId = messageId;
    }
    public long getUserId() {
        return userId;
    }
    public void setUserId(long userId) {
        this.userId = userId;
    }
    public String getContent() {
        return content;
    }
    public void setContent(String content) {
        this.content = content;
    }
    public String getLocation() {
        return location;
    }
    public void setLocation(String location) {
        this.location = location;
    }
}
4

1 に答える 1

0

コードベースを最後の安定したリビジョンに戻すところまで行きましたが、まだ問題がありました。問題は、削除したフィールドを参照するテーブルの履歴トリガーが原因でした。

例外メッセージは、問題がマッピングにあることを不正確に示しているようです。

于 2013-02-27T04:01:26.840 に答える