org.hibernate.Dialekt.OracleDialect nicht unterstützt identity key generation
War ich versucht, zu importieren einer Beispiel-Projekt in eclipse und mit den unten angegebenen Fehler auf, der die Anwendung ausführt.
Caused by: org.hibernate.MappingException: org.hibernate.dialect.OracleDialect does not support identity key generation
at org.hibernate.dialect.Dialect.getIdentityColumnString(Dialect.java:743)
at org.hibernate.dialect.Dialect.getIdentityColumnString(Dialect.java:733)
at org.hibernate.mapping.Table.sqlCreateString(Table.java:426)
at org.hibernate.cfg.Configuration.generateSchemaCreationScript(Configuration.java:1028)
at org.hibernate.tool.hbm2ddl.SchemaExport.<init>(SchemaExport.java:125)
at org.hibernate.internal.SessionFactoryImpl.<init>(SessionFactoryImpl.java:492)
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1744)
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1782)
at org.springframework.orm.hibernate4.LocalSessionFactoryBuilder.buildSessionFactory(LocalSessionFactoryBuilder.java:247)
at org.springframework.orm.hibernate4.LocalSessionFactoryBean.buildSessionFactory(LocalSessionFactoryBean.java:373)
at org.springframework.orm.hibernate4.LocalSessionFactoryBean.afterPropertiesSet(LocalSessionFactoryBean.java:358)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1541)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1479)
... 32 more
Als pro diese SO link, den ich verändert habe
@GeneratedValue(strategy = GenerationType.IDENTITY)
zu
@GeneratedValue(strategy = GenerationType.AUTO)
oder @GeneratedValue(strategy = GenerationType.TABLE)
Aber hat nicht funktioniert.
Hier ist der code:
User.java:
@Entity
@Table(name = "users")
@ManagedBean
@ViewScoped
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
@Column(name = "username", nullable = false)
private String username;
@Column(name = "password", nullable = false)
private String password;
@Column(name = "role", nullable = false)
private String role;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getRole() {
return role;
}
public void setRole(String role) {
this.role = role;
}
}
Aus der applicationContext.xml:
<!-- Session Factory Declaration -->
<bean id="SessionFactory"
class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
<property name="dataSource" ref="DataSource" />
<property name="annotatedClasses">
<list>
<value>com.crud.model.User</value>
</list>
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.OracleDialect</prop>
<prop key="hibernate.show_sql">true</prop>
<prop key="hibernate.hbm2ddl.auto">create</prop>
</props>
</property>
</bean>
- entfernen Sie die close-Methode Erklärung
- Hast du das behoben?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie sagen, Hibernate verwenden eine Sequenz zu generieren, die Ihre ID ' s
Diese config im Grunde sagt Hibernate verwenden einer Datenbank-Sequenz genannt ID_SEQ, die zum generieren der ID für dieses Objekt. Sie können festlegen, dass andere Sequenzen, die auf andere Objekte, wenn Sie möchten, dass andere einzigartige ID 's, oder Sie können die gleiche Reihenfolge verwenden, wenn Sie möchten, globally unique ID' s in Ihrem gesamten system.
Der einzige Nachteil ist, dass die nicht durchführen batch-Einsätze (ohne einige weitere config), weil Hibernate braucht, um die nächste Sequenz mit dem Wert aus der Datenbank zu jeder Zeit, und Sie können nicht verwenden Sie diese Konfiguration, wenn Sie möchten, eine MySQL-Datenbank, weil Sie keine Sequenzen unterstützen.
Wenn einer das macht keinen Sinn lass es mich wissen und ich werde es weiter erklären.
IDENTITY
. Ich bin mitOracle
DBConnection cannot be null when 'hibernate.dialect' not set
dataSource
Erklärung? Diese Fehlermeldung bedeutet, dass Hibernate kann keine Verbindung zu Ihrer DatenbankGenerationType.SEQUENCE
wie Sie bereits erwähnt. Jetzt bin ich in der Lage, um die app angeschlossen an die db. Viel Dank.Können Sie einfach
@GeneratedValue(strategy = GenerationType.TABLE)
wenn Sie müssen nur in der Lage sein, um auto-Inkrement-Wert für Attribute wie einige ID ist Primärschlüssel der Tabelle. Es funktionierte für mich. Hoffe, es hilft.mein Ruf zu niedrig ist...
Gut, ich bin sehr dankbar JamesENL
Ich ersetzt
durch
und das funktioniert auch
@SequenceGenerator
-, Sequenz-name standardmäßig(zumindest Hibernate) auf einen Wert, der angegeben ist fürgenerator
d.h.,id_sequence
.@org.hibernate.annotations.GenericGenerator
.Statt IDENTITÄT den Einsatz von NATIVEN und verwenden Sie eine Sequenz mit ihm. Link
Den Grund für die Ausnahme ist:
Hibernate erwartet von der zugrunde liegenden Datenbank, um eine auto-Inkrement-Funktion für eine gegebene Eigenschaft, in Ihrem Fall ist es
id
. IOW, Oracle(Ihr Fall) unterstützen sollte, die auto-Inkrement-Funktion für ein Feld. Oracle begann Sie zu bieten auto-Inkrement-Funktion mit 12c version und, als Ihre version weniger wurde, haben Sie die Ausnahme .