-->
These old forums are deprecated now and set to read-only. We are waiting for you on our new forums!
More modern, Discourse-based and with GitHub/Google/Twitter authentication built-in.

All times are UTC - 5 hours [ DST ]



Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 1 post ] 
Author Message
 Post subject: Ersatz für org.hibernate.id.GUIDGenerator
PostPosted: Mon Apr 04, 2011 9:33 am 
Beginner
Beginner

Joined: Wed Feb 08, 2006 10:09 am
Posts: 28
Hallo,
ich nutze folgende Konstruktion:

public class PatchedOracle10gDialect extends Oracle10gDialect
{
/**
* Returns a GUIDGenerator to used UUIDs in a string.
*/
@Override
public Class<?> getNativeIdentifierGeneratorClass()
{
return GUIDGenerator.class;
}
}

Die Klasse GUIDGenerator holt sich die UUID korrekterweise von der Oracle-Datenbank.

Nun bekomme ich seit Hibernate 3.? beim Programmstart folgende Warnung:

Apr 4, 2011 11:43:18 AM org.hibernate.id.GUIDGenerator <init>
WARNING: DEPRECATED : use org.hibernate.id.UUIDGenerator instead with custom org.hibernate.id.UUIDGenerationStrategy implementation

DEPRECATED ist schlecht, dachte ich mir, also schaue ich nach, wie ich es ersetze.

Dabei bin ich auf
<property name="hibernate.id.new_generator_mappings" value="true"/>
gestoßen und da unser Projekt noch nicht produktiv ist, dachte ich mir, dann mache ich es jetzt richtig.

Aber in der Klasse org.hibernate.cfg.AnnoationBinder bin ich auf folgende Methode gestoßen:

private static String generatorType(GenerationType generatorEnum, Mappings mappings) {
boolean useNewGeneratorMappings = mappings.useNewGeneratorMappings();
switch ( generatorEnum ) {
case IDENTITY:
return "identity";
case AUTO:
return useNewGeneratorMappings
? org.hibernate.id.enhanced.SequenceStyleGenerator.class.getName()
: "native";
case TABLE:
return useNewGeneratorMappings
? org.hibernate.id.enhanced.TableGenerator.class.getName()
: MultipleHiLoPerTableGenerator.class.getName();
case SEQUENCE:
return useNewGeneratorMappings
? org.hibernate.id.enhanced.SequenceStyleGenerator.class.getName()
: "seqhilo";
}
throw new AssertionFailure( "Unknown GeneratorType: " + generatorEnum );
}

was mich vollends verwirrt hat.

Macht hibernate.id.new_generator_mappings=true nur mit Sequence oder HiLo IdentifierGeneratoren Sinn?

Muß ich also für UUID hibernate.id.new_generator_mappings=false setzen?

Für die WARNING aus dem LOG:
Soll ich da einfach den Code aus org.hibernate.id.GUIDGenerator in eine eigene UUIDGenerationStrategy kopieren?

Auszug aus GUIDGenerator:
public Serializable generate(SessionImplementor session, Object obj) throws HibernateException {

final String sql = session.getFactory().getDialect().getSelectGUIDString();
try {
PreparedStatement st = session.getBatcher().prepareSelectStatement(sql);
try {
ResultSet rs = st.executeQuery();
final String result;
try {
rs.next();
result = rs.getString(1);
}
finally {
rs.close();
}
log.debug("GUID identifier generated: " + result);
return result;
}
finally {
session.getBatcher().closeStatement(st);
}
}
catch (SQLException sqle) {
throw JDBCExceptionHelper.convert(
session.getFactory().getSQLExceptionConverter(),
sqle,
"could not retrieve GUID",
sql
);
}
}

Er holt die UUID von Oracle, was meiner Ansicht nach richtig sein müßte.

Ich bin für jeden Hinweis, ob und was ich jetzt ändern sollte dankbar.

Ciao
Peter Schütt


Top
 Profile  
 
Display posts from previous:  Sort by  
Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 1 post ] 

All times are UTC - 5 hours [ DST ]


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum

Search for:
© Copyright 2014, Red Hat Inc. All rights reserved. JBoss and Hibernate are registered trademarks and servicemarks of Red Hat, Inc.