[hibernate-issues] [Hibernate-JIRA] Moved: (HBX-933) Property access and type utilization conflict between runtime and code generation.
Max Rydahl Andersen (JIRA)
noreply at atlassian.com
Thu Apr 19 15:17:04 EDT 2007
[ http://opensource.atlassian.com/projects/hibernate/browse/HBX-933?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Max Rydahl Andersen moved HHH-2581 to HBX-933:
----------------------------------------------
Affects Version/s: (was: 3.2.3)
Component/s: (was: core)
Workflow: jira (was: Expanded Workflow 2)
Key: HBX-933 (was: HHH-2581)
Project: Hibernate Tools (was: Hibernate3)
> Property access and type utilization conflict between runtime and code generation.
> -----------------------------------------------------------------------------------
>
> Key: HBX-933
> URL: http://opensource.atlassian.com/projects/hibernate/browse/HBX-933
> Project: Hibernate Tools
> Issue Type: Bug
> Environment: Fedora Core 6
> Reporter: ssarver
> Priority: Minor
> Attachments: jira.zip
>
>
> ########################################################
> #
> # README
> #
> ########################################################
> INSTRUCTIONS:
> 0) Edit hibernate.cfg.xml
> 1) Run user_ty.ddl
> 2) Execute: ant test
> >>>If code generation is performed with the type attribute
> set to the derived UserType
> <property name="user" type="test.UserUserType">
> <meta attribute="use-in-tostring">true</meta>
> <column name="userObject" sql-type="USER_TY"/>
> </property>
> then hbm2java creates a Person with the derived UserType:
> package test;
> /**
> * Person generated by hbm2java
> */
> public class Person implements java.io.Serializable {
> private long id;
> private String name;
> private long age;
> private UserUserType user;
> public Person() {
> }
> public Person(String name, long age) {
> this.name = name;
> this.age = age;
> }
> public Person(String name, long age, UserUserType user) {
> this.name = name;
> this.age = age;
> this.user = user;
> }
> ...
> >>>If code generation is performed with the access attribute set to
> the derived UserType and the type set to User:
> <property name="user" access="test.UserUserType" type="test.User">
> <meta attribute="use-in-tostring">true</meta>
> <column name="userObject" sql-type="USER_TY"/>
> </property>
> then hbm2java creates a Person with the desired User type:
> package test;
> /**
> * Person generated by hbm2java
> */
> public class Person implements java.io.Serializable {
> private long id;
> private String name;
> private long age;
> private User user;
> public Person() {
> }
> public Person(String name, long age) {
> this.name = name;
> this.age = age;
> }
> public Person(String name, long age, User user) {
> this.name = name;
> this.age = age;
> this.user = user;
> }
> ...
> However, using the following mapping at runtime:
> <property name="user" access="test.UserUserType" type="test.User">
> <meta attribute="use-in-tostring">true</meta>
> <column name="userObject" sql-type="USER_TY"/>
> </property>
> produces the error:
> [java] Caused by: java.lang.ExceptionInInitializerError
> [java] at persistence.HibernateUtil.<clinit>(Unknown Source)
> [java] at test.TestPerson.testCreatePerson(Unknown Source)
> [java] at test.TestPerson.main(Unknown Source)
> [java] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> [java] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
> [java] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
> [java] at java.lang.reflect.Method.invoke(Method.java:585)
> [java] at org.apache.tools.ant.taskdefs.ExecuteJava.run(ExecuteJava.java:217)
> [java] at org.apache.tools.ant.taskdefs.ExecuteJava.execute(ExecuteJava.java:152)
> [java] ... 20 more
> [java] Caused by: org.hibernate.MappingException: Could not determine type for: test.User, for columns: [org.hibernate.
> mapping.Column(userObject)]
> Complete run:
> ssarver beta/home/ssarver/jira> ant test
> Buildfile: build.xml
> hbm:
> [hibernate-tool] Executing Hibernate Tool with a Standard Configuration
> [hibernate-tool] 1. task: hbm2java (Generates a set of .java files)
> [hibernate-tool] 08:39:29,040 INFO Environment:509 - Hibernate 3.2.3
> [hibernate-tool] 08:39:29,076 INFO Environment:542 - hibernate.properties not found
> [hibernate-tool] 08:39:29,083 INFO Environment:676 - Bytecode provider name : cglib
> [hibernate-tool] 08:39:29,114 INFO Environment:593 - using JDK 1.4 java.sql.Timestamp handling
> [hibernate-tool] 08:39:29,381 INFO Configuration:1460 - configuring from file: hibernate.cfg.xml
> [hibernate-tool] 08:39:29,611 INFO Configuration:1541 - Configured SessionFactory: null
> [hibernate-tool] 08:39:29,618 INFO Configuration:299 - Reading mappings from file: /home/ssarver/jira/src/test/Person.hbm.x
> ml
> [hibernate-tool] 08:39:29,942 INFO HbmBinder:300 - Mapping class: test.Person -> person
> [hibernate-tool] 08:39:30,393 INFO Version:15 - Hibernate Tools 3.2.0.b9
> [hibernate-tool] 2. task: hbm2dao (Generates a set of DAOs)
> [hibernate-tool] 3. task: hbm2ddl (Generates database schema)
> [hibernate-tool] 08:39:32,450 INFO Dialect:152 - Using dialect: org.hibernate.dialect.Oracle9Dialect
> [hibernate-tool] 08:39:32,597 INFO SchemaExport:154 - Running hbm2ddl schema export
> [hibernate-tool] 08:39:32,607 INFO SchemaExport:174 - writing generated schema to file: /home/ssarver/jira/target/src/test.
> ddl
> [hibernate-tool] 08:39:32,609 INFO SchemaExport:179 - exporting generated schema to database
> [hibernate-tool] 08:39:32,650 INFO DriverManagerConnectionProvider:41 - Using Hibernate built-in connection pool (not for p
> roduction use!)
> [hibernate-tool] 08:39:32,656 INFO DriverManagerConnectionProvider:42 - Hibernate connection pool size: 20
> [hibernate-tool] 08:39:32,657 INFO DriverManagerConnectionProvider:45 - autocommit mode: false
> [hibernate-tool] 08:39:32,708 INFO DriverManagerConnectionProvider:80 - using driver: oracle.jdbc.driver.OracleDriver at UR
> L: jdbc:oracle:thin:@oracrcdbsdev01.sd.lpl.com:1526:lpldev
> [hibernate-tool] 08:39:32,710 INFO DriverManagerConnectionProvider:86 - connection properties: {user=ops$ssarver, password=
> ****}
> [hibernate-tool]
> [hibernate-tool] drop function SELECT_PERSON_BY_NAME;
> [hibernate-tool]
> [hibernate-tool] drop table person cascade constraints;
> [hibernate-tool]
> [hibernate-tool] drop sequence hibernate_sequence;
> [hibernate-tool]
> [hibernate-tool] create table person (
> [hibernate-tool] id number(19,0) not null,
> [hibernate-tool] name varchar2(255 char) not null,
> [hibernate-tool] age number(19,0) not null,
> [hibernate-tool] userObject USER_TY,
> [hibernate-tool] primary key (id)
> [hibernate-tool] );
> [hibernate-tool]
> [hibernate-tool] create sequence hibernate_sequence;
> [hibernate-tool]
> [hibernate-tool] CREATE OR REPLACE FUNCTION SELECT_PERSON_BY_NAME(p_name varchar) RETURN SYS_REFCURSOR IS st_cursor SYS_
> REFCURSOR; BEGIN OPEN st_cursor FOR SELECT * from person WHERE name LIKE '%' || p_name || '%'; RETURN st_cursor; END;;
> [hibernate-tool] 08:39:34,224 INFO SchemaExport:196 - schema export complete
> [hibernate-tool] 08:39:34,229 INFO DriverManagerConnectionProvider:147 - cleaning up connection pool: jdbc:oracle:thin:@ora
> crcdbsdev01.sd.lpl.com:1526:lpldev
> [hibernate-tool] 4. task: hbm2cfgxml (Generates hibernate.cfg.xml)
> copyhbm:
> [mkdir] Created dir: /home/ssarver/jira/target/classes
> [copy] Copying 1 file to /home/ssarver/jira/target/classes
> build:
> [javac] Compiling 6 source files to /home/ssarver/jira/target/classes
> [javac] /home/ssarver/jira/target/src/test/Person.java
> [javac] /home/ssarver/jira/target/src/test/PersonHome.java
> [javac] /home/ssarver/jira/src/persistence/HibernateUtil.java
> [javac] /home/ssarver/jira/src/test/TestPerson.java
> [javac] /home/ssarver/jira/src/test/User.java
> [javac] /home/ssarver/jira/src/test/UserUserType.java
> 08:39:35,740 INFO DriverManagerConnectionProvider:147 - cleaning up connection pool: jdbc:oracle:thin:@oracrcdbsdev01.sd.lp
> l.com:1526:lpldev
> jar:
> [jar] Building jar: /home/ssarver/jira/target/test.jar
> test:
> [java] 08:39:37,901 INFO Environment:509 - Hibernate 3.2.3
> [java] 08:39:37,960 INFO Environment:542 - hibernate.properties not found
> [java] 08:39:37,967 INFO Environment:676 - Bytecode provider name : cglib
> [java] 08:39:38,051 INFO Environment:593 - using JDK 1.4 java.sql.Timestamp handling
> [java] 08:39:38,362 INFO Configuration:1426 - configuring from resource: /hibernate.cfg.xml
> [java] 08:39:38,366 INFO Configuration:1403 - Configuration resource: /hibernate.cfg.xml
> [java] 08:39:39,227 INFO Configuration:553 - Reading mappings from resource : test/Person.hbm.xml
> [java] 08:39:39,594 INFO HbmBinder:300 - Mapping class: test.Person -> person
> [java] 08:39:39,731 INFO Configuration:1541 - Configured SessionFactory: null
> [java] java.lang.ExceptionInInitializerError
> [java] at org.apache.tools.ant.taskdefs.ExecuteJava.execute(ExecuteJava.java:194)
> [java] at org.apache.tools.ant.taskdefs.Java.run(Java.java:747)
> [java] at org.apache.tools.ant.taskdefs.Java.executeJava(Java.java:201)
> [java] at org.apache.tools.ant.taskdefs.Java.execute(Java.java:104)
> [java] at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:288)
> [java] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> [java] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
> [java] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
> [java] at java.lang.reflect.Method.invoke(Method.java:585)
> [java] at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:105)
> [java] at org.apache.tools.ant.Task.perform(Task.java:348)
> [java] at org.apache.tools.ant.Target.execute(Target.java:357)
> [java] at org.apache.tools.ant.Target.performTasks(Target.java:385)
> [java] at org.apache.tools.ant.Project.executeSortedTargets(Project.java:1329)
> [java] at org.apache.tools.ant.Project.executeTarget(Project.java:1298)
> [java] at org.apache.tools.ant.helper.DefaultExecutor.executeTargets(DefaultExecutor.java:41)
> [java] at org.apache.tools.ant.Project.executeTargets(Project.java:1181)
> [java] at org.apache.tools.ant.Main.runBuild(Main.java:698)
> [java] at org.apache.tools.ant.Main.startAnt(Main.java:199)
> [java] at org.apache.tools.ant.launch.Launcher.run(Launcher.java:257)
> [java] at org.apache.tools.ant.launch.Launcher.main(Launcher.java:104)
> [java] Caused by: java.lang.ExceptionInInitializerError
> [java] at persistence.HibernateUtil.<clinit>(Unknown Source)
> [java] at test.TestPerson.testCreatePerson(Unknown Source)
> [java] at test.TestPerson.main(Unknown Source)
> [java] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> [java] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
> [java] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
> [java] at java.lang.reflect.Method.invoke(Method.java:585)
> [java] at org.apache.tools.ant.taskdefs.ExecuteJava.run(ExecuteJava.java:217)
> [java] at org.apache.tools.ant.taskdefs.ExecuteJava.execute(ExecuteJava.java:152)
> [java] ... 20 more
> [java] Caused by: org.hibernate.MappingException: Could not determine type for: test.User, for columns: [org.hibernate.
> mapping.Column(userObject)]
> [java] at org.hibernate.mapping.SimpleValue.getType(SimpleValue.java:266)
> [java] at org.hibernate.mapping.SimpleValue.isValid(SimpleValue.java:253)
> [java] at org.hibernate.mapping.Property.isValid(Property.java:185)
> [java] at org.hibernate.mapping.PersistentClass.validate(PersistentClass.java:440)
> [java] at org.hibernate.mapping.RootClass.validate(RootClass.java:192)
> [java] at org.hibernate.cfg.Configuration.validate(Configuration.java:1102)
> [java] at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1287)
> [java] at persistence.HibernateUtil.<clinit>(Unknown Source)
> [java] ... 28 more
> [java] --- Nested Exception ---
> [java] java.lang.ExceptionInInitializerError
> [java] at persistence.HibernateUtil.<clinit>(Unknown Source)
> [java] at test.TestPerson.testCreatePerson(Unknown Source)
> [java] at test.TestPerson.main(Unknown Source)
> [java] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> [java] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
> [java] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
> [java] at java.lang.reflect.Method.invoke(Method.java:585)
> [java] at org.apache.tools.ant.taskdefs.ExecuteJava.run(ExecuteJava.java:217)
> [java] at org.apache.tools.ant.taskdefs.ExecuteJava.execute(ExecuteJava.java:152)
> [java] at org.apache.tools.ant.taskdefs.Java.run(Java.java:747)
> [java] at org.apache.tools.ant.taskdefs.Java.executeJava(Java.java:201)
> [java] at org.apache.tools.ant.taskdefs.Java.execute(Java.java:104)
> [java] at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:288)
> [java] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> [java] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
> [java] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
> [java] at java.lang.reflect.Method.invoke(Method.java:585)
> [java] at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:105)
> [java] at org.apache.tools.ant.Task.perform(Task.java:348)
> [java] at org.apache.tools.ant.Target.execute(Target.java:357)
> [java] at org.apache.tools.ant.Target.performTasks(Target.java:385)
> [java] at org.apache.tools.ant.Project.executeSortedTargets(Project.java:1329)
> [java] at org.apache.tools.ant.Project.executeTarget(Project.java:1298)
> [java] at org.apache.tools.ant.helper.DefaultExecutor.executeTargets(DefaultExecutor.java:41)
> [java] at org.apache.tools.ant.Project.executeTargets(Project.java:1181)
> [java] at org.apache.tools.ant.Main.runBuild(Main.java:698)
> [java] at org.apache.tools.ant.Main.startAnt(Main.java:199)
> [java] at org.apache.tools.ant.launch.Launcher.run(Launcher.java:257)
> [java] at org.apache.tools.ant.launch.Launcher.main(Launcher.java:104)
> [java] Caused by: org.hibernate.MappingException: Could not determine type for: test.User, for columns: [org.hibernate.
> mapping.Column(userObject)]
> [java] at org.hibernate.mapping.SimpleValue.getType(SimpleValue.java:266)
> [java] at org.hibernate.mapping.SimpleValue.isValid(SimpleValue.java:253)
> [java] at org.hibernate.mapping.Property.isValid(Property.java:185)
> [java] at org.hibernate.mapping.PersistentClass.validate(PersistentClass.java:440)
> [java] at org.hibernate.mapping.RootClass.validate(RootClass.java:192)
> [java] at org.hibernate.cfg.Configuration.validate(Configuration.java:1102)
> [java] at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1287)
> [java] at persistence.HibernateUtil.<clinit>(Unknown Source)
> [java] ... 28 more
> BUILD SUCCESSFUL
> Total time: 13 seconds
> ssarver beta/home/ssarver/jira>
> >>>Work Around:
> Change the name of
> hbm/test/Person.hbm.xml.hide
> to hbm/test/Person.hbm.xml
> and this file to ensure that this mapping definition is
> is included in test.jar and not src/test/Person.hbm.xml
> This way, at runtime, the following mapping and Person
> is being used together successfully:
> <property name="user" type="test.UserUserType">
> <meta attribute="use-in-tostring">true</meta>
> <column name="userObject" sql-type="USER_TY"/>
> </property>
> package test;
> /**
> * Person generated by hbm2java
> */
> public class Person implements java.io.Serializable {
> private long id;
> private String name;
> private long age;
> private User user;
> public Person() {
> }
> public Person(String name, long age) {
> this.name = name;
> this.age = age;
> }
> public Person(String name, long age, User user) {
> this.name = name;
> this.age = age;
> this.user = user;
> }
> ...
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: http://opensource.atlassian.com/projects/hibernate/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira
More information about the hibernate-issues
mailing list