ich Hibernate Ausnahme bin immer:Seltsam Hibernate Ausnahme mit Spaltentyp
Falscher Spaltentyp. Gefunden: bit, erwartet: Wahrheitswert Voreinstellung TRUE
Ich habe Klasse User:
package mypackage;
import javax.persistence.*;
import java.util.ArrayList;
import java.util.List;
@Entity
@Table(name = "USER")
public class User {
@Id
@GeneratedValue
@Column(name = "ID", unique = true, nullable = false)
private Long id;
@Column(name = "STATUS", columnDefinition = "BOOLEAN DEFAULT TRUE",
nullable = false)
private Boolean status = Boolean.TRUE;
// getters and setters
}
Dies funktioniert einwandfrei, wenn Hibernate Tabelle erstellt sich in der Datenbank. Wenn
<property name="hibernate.hbm2ddl.auto">create</property>
oder
<property name="hibernate.hbm2ddl.auto">create-drop</property>
Aber wenn
- ich mein Programm laufen und erlauben Hibernate diese Tabelle zu erstellen
- dann ändere ich den Wert von
hibernate.hbm2ddl.auto
zum validieren und ich laufe mein Programm wieder mit der Tabelle, die von Hibernate und mit
<property name="hibernate.hbm2ddl.auto">validate</property>
so bekomme ich die Ausnahme erzeugt hat:
org.hibernate.HibernateException: Falsche Spalte Geben Sie dbtest.user für die Spalte STATUS ein. Gefunden: bit, erwartet: Wahrheitswert Voreinstellung TRUE
Jede Idee, was der Grund für dieses Verhalten von Hibernate sein könnte und wie kann ich es beheben?
Ich verwende MySQL server 5.1
und Hibernate 4.0.1
.
Meine Run
Klasse ist nur zwei Zeilen:
public class Run {
public static void main(String[] main) {
SessionFactory sessionFactory =
new AnnotationConfiguration().configure().buildSessionFactory();
Session session = sessionFactory.getCurrentSession();
}
}
Die Struktur der Tabelle:
CREATE TABLE USER (
ID BIGINT(20) NOT NULL AUTO_INCREMENT,
STATUS TINYINT(1) NOT NULL DEFAULT 1,
PRIMARY KEY (ID),
UNIQUE INDEX ID (ID)
)
COLLATE='utf8_general_ci'
ENGINE=MyISAM
ROW_FORMAT=DEFAULT
AUTO_INCREMENT=2
Mein hibernate.cfg
:
<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="connection.url">jdbc:mysql://127.0.0.1:3306/dbtest</property>
<property name="connection.username">root</property>
<property name="connection.password">root</property>
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
<property name="current_session_context_class">thread</property>
<property name="connection.pool_size">5</property>
<property name="hibernate.transaction.flush_before_completion">true</property>
<property name="hibernate.transaction.auto_close_session">true</property>
<property name="hibernate.hbm2ddl.auto">validate</property>
<property name="hibernate.show_sql">false</property>
<property name="hibernate.format_sql">true</property>
<property name="hibernate.use_sql_comments">false</property>
<property name="hibernate.connection.charSet">true</property>
<mapping class="mypackage.User"/>
</session-factory>
</hibernate-configuration>
Hibernate die Tabelle mit Typ erstellt TINYINT
und Ich vermittele die Daten nicht Basis und nehmen Sie keine Änderungen in der Tabelle manuell vor! Ich ändere nur die hibernate.hbm2ddl.auto
in die validate
und sonst nichts.
Verwandte: http: // Stackoverflow. com/questions/289727 –
Ich habe nicht ** Standardwert ** in meiner Tabelle, wenn ich "BIT DEFAULT 1" anstatt "BOOLEAN DEFAULT TRUE" in Anmerkungen wähle. Ich bekomme 'STATUS BIT (1) NOT NULL' in db. –
So kann meine Frage wie folgt umformuliert werden: ** Wie man einen Standardwert für ein boolean Feld mit der Hibernate Annotation korrekt erklärt? ** –