Я работаю над проектом 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;
}
}
У вас или у вас есть сопоставление для столбца с именем 'preSurgicalReminderSent'? – Perception
Извините, это было ошибкой в моем примере, я изменил имя столбца в моем примере и пропустил это в примере кода. –
Пример теперь имеет правильный отредактированный вывод выше. –