Ich benutze Hibernate mit Spring, h2 und Liquibase und ich versuche, einen benutzerdefinierten String-ID-Generator für meine Entitäten, indem Sie Beispiel mit dieser blog post, aber ich bin einen Fehler bekommen: Caused by: org.hibernate.id.IdentifierGenerationException: Unknown integral data type for ids : java.lang.String
Wie Implementieren eines benutzerdefinierten String Sequence Identifier-Generator mit Hibernate
Hier mein SequenceStyleGenerator Code:
public class CTCIDGenerator extends SequenceStyleGenerator {
@Override
public Serializable generate(SessionImplementor session, Object obj) {
if (obj instanceof Identifiable) {
Identifiable identifiable = (Identifiable) obj;
Serializable id = identifiable.getId();
if (id != null) {
return id;
}
}
return "CTC"+super.generate(session, obj);
}
}
Meine Einheit Code:
@Entity
@Table(name = "contact")
public class Contact implements Serializable, Identifiable<String> {
private static final long serialVersionUID = 1L;
@Id
@GenericGenerator(
name = "assigned-sequence",
strategy = "net.atos.seirich.support.domain.idgenerator.CTCIDGenerator",
parameters = @org.hibernate.annotations.Parameter(
name = "sequence_name",
value = "hibernate_sequence"
)
)
@GeneratedValue(generator = "assigned-sequence", strategy = GenerationType.SEQUENCE)
private String id;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
}
Und die liquibase XML:
<?xml version="1.0" encoding="utf-8"?>
<databaseChangeLog
xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.4.xsd">
<property name="autoIncrement" value="true" dbms="mysql,h2,postgresql,oracle"/>
<property name="floatType" value="float4" dbms="postgresql, h2"/>
<property name="floatType" value="float" dbms="mysql, oracle"/>
<changeSet id="20160513091901-1" author="jhipster">
<createTable tableName="contact">
<column name="id" type="longvarchar" autoIncrement="${autoIncrement}">
<constraints primaryKey="true" nullable="false"/>
</column>
</changeSet>
</databaseChangeLog>
Btw ist es möglich, die Parameter sequence_name so überwintern verarbeiten kann dies allein zu vermeiden?
Wenn mir jemand helfen kann, Danke!
Ähnliche Diskussion ist passiert bei: http://StackOverflow.com/A/15470272/2128503 – Mamun