2013-02-26 3 views
0

Я работаю над проектом Java, и я смущен относительно того, что происходит с ситуацией, на которую я наткнулся.Weird Hibernate Error

Я развиваюсь на mac с mac osx mountain lion. Я использую eclipse и все настроено правильно, и так долго развивался без проблем.

Я использую MySQL и Hibernate с файлами сопоставления HBM, я использую Spring, чтобы связать все это вместе, указав, какие файлы сопоставления должны использоваться. Недавно я попытался добавить новый столбец в таблицу, обновил объекты домена и обновил файлы сопоставления hbm.

Теперь я начал получать ошибку:

Неизвестный столбец «dateSent» в «списке поля»

хотя колонка была в моем файле отображения и столбец был в базе данных, а также в мой объект домена.

Затем я удалил его и перестроил все с помощью Maven, теперь у меня возникает еще более странная проблема, когда у моего кода есть все ссылки на удаленный столбец, столбец удален из базы данных, а столбец удален из hbm файл сопоставления. Тем не менее, я все еще вижу, что Hibernate выдает ошибку о столбце, как будто он все еще существует где-то в моем коде, но это не так. Даже более странно, выход Hibernate не показывает неправильное использование попытки вставить запись с рассматриваемым столбцом ... см. Ниже по ошибке: «Hibernate: вставлять в сообщения (идентификатор пользователя, содержимое, местоположение) значения (?,?, ?)»...

Вот ошибка я получаю:

 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, которые могли бы привести к этому?

Я перезапустил свой компьютер, выполнив установку Maven clean/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; 
    } 
} 
+0

У вас или у вас есть сопоставление для столбца с именем 'preSurgicalReminderSent'? – Perception

+0

Извините, это было ошибкой в ​​моем примере, я изменил имя столбца в моем примере и пропустил это в примере кода. –

+0

Пример теперь имеет правильный отредактированный вывод выше. –

ответ

0

Я дошел до того, возвращаясь моим кодовым до последней стабильной ревизии, и я все еще имея проблемы. Проблема закончилась тем, что из-за триггера истории в таблице, ссылающейся на удаленное поле.

Сообщение об исключении, похоже, неточно указывает на то, что проблема связана с моим сопоставлением.