[hibernate-issues] [Hibernate-JIRA] Commented: (HHH-6927) Cannot register a type through configuration if the type is parametrized
Steve Ebersole (JIRA)
noreply at atlassian.com
Fri Dec 30 12:22:19 EST 2011
[ http://opensource.atlassian.com/projects/hibernate/browse/HHH-6927?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=44780#comment-44780 ]
Steve Ebersole commented on HHH-6927:
-------------------------------------
I understand what you want. But you are mixing 2 different concepts.
In this code sample, you have an inline type def. Think of a type def as a template for creating type instances. Again, that is not the purpose of {{registerTypeOverride}}. To date we do not really have a way to "programatically" define/provide type defs. Mainly because it is already exposed and available by the 2 means you already mentioned.
I completely fail to see what allowing you to do the "type def class name" registration programatically really buys you.
> Cannot register a type through configuration if the type is parametrized
> ------------------------------------------------------------------------
>
> Key: HHH-6927
> URL: http://opensource.atlassian.com/projects/hibernate/browse/HHH-6927
> Project: Hibernate Core
> Issue Type: Bug
> Components: core
> Affects Versions: 3.6.5
> Reporter: Stephane Nicoll
>
> Since I don't want to hardcode @TypeDefs in each class hierarchy that uses a custom type, I am using the {{cfg.registerTypeOverride}} method. This works fine for simple user type but I have a parameterized user type.
> In that case, using this method leads to a single user type instance being used and shared for all my entities and no parameter is injected at all. Looking a bit deeper I think I found the culprit in TypeResolver.
> {code:java}
> public Type heuristicType(String typeName, Properties parameters) throws MappingException {
> Type type = basic( typeName );
> if ( type != null ) {
> return type;
> }
> try {
> Class typeClass = ReflectHelper.classForName( typeName );
> if ( typeClass != null ) {
> return typeFactory.byClass( typeClass, parameters );
> }
> }
> catch ( ClassNotFoundException ignore ) {
> }
> return null;
> }
> {code}
> base(typeName) will actually return the type that I have registered. Notice that basic does not take the {{parameters}} argument into account. Since it's not null it just returns that type.
> Maybe I did something wrong. I was surprised that cfg actually registers *instances* and not classes. Both @TypeDefs and hbm.xml specifies classes. Maybe adding an option to register a class programmatically?
--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira
More information about the hibernate-issues
mailing list