Hi, all
I tried to use a <any> mapping in my program, but it keeps output (both on hibernate 3.1.3 and 3.2RC):
java.lang.ClassCastException: java.lang.String
at org.hibernate.type.ClassType.toString(ClassType.java:43)
at org.hibernate.type.NullableType.nullSafeSet(NullableType.java:87)
at org.hibernate.type.NullableType.nullSafeSet(NullableType.java:65)
at org.hibernate.type.AnyType.nullSafeSet(AnyType.java:136)
at org.hibernate.persister.entity.AbstractEntityPersister.dehydrate(AbstractEntityPersister.java:1910)
at org.hibernate.persister.entity.AbstractEntityPersister.dehydrate(AbstractEntityPersister.java:1887)
at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2117)
at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2503)
My program is like this:
Code:
/**
* @hibernate.class table="test_a" lazy="true"
*/
public class A implements Serializable {
private Long id;
private String name;
/**
* @hibernate.id generator-class="native"
*/
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
/**
* @return
*
* @hibernate.property
*/
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}//class A
Code:
/**
* @hibernate.class table="test_b" lazy="true"
*/
public class B implements Serializable {
private Long id;
private String name;
/**
* @hibernate.id generator-class="native"
*/
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
/**
* @return
*
* @hibernate.property
*/
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}//class B
Code:
/**
* @hibernate.class table="test_c" lazy="true"
*/
public class C {
private Long id;
private Object entity;
/**
* @hibernate.id generator-class="native"
*/
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
/**
* @hibernate.any id-type="long" cascade="none" meta-type="java.lang.Class"
* @hibernate.any-column name="table_name"
* @hibernate.any-column name="entity_id"
*/
public X getEntity() {
return entity;
}
public void setEntity(X entity) {
this.entity = entity;
}
}//class C
Code:
public void test() throws Exception {
A a = new A();
a.setName("hello from A");
session.save(a);
B b = new B();
b.setName("hello from B");
session.save(b);
C c = new C();
c.setEntity(a);
session.save(c);
}//test()
Can anybody give me some idea?
Thank you.