这里是private Set User=new HashSet(),不时hashMap().这里的classes属性还是一个HashSet对象,其中包含了一个address对象
的引用。那么,当调用session.save(classes)时,Hibernate应该会把HashSet转成“net.sf.hibernate.collection.Set“ 但是在debug 时发现仍然是hashset, 而没有变成Set,
所以可能出现以上错误,但是这是什么原因呢?怎么改呢?或是有什么地方不多,如果要源码我可以发布上来,希望高手指点!!!!
的引用。那么,当调用session.save(classes)时,Hibernate应该会把HashSet转成“net.sf.hibernate.collection.Set“ 但是在debug 时发现仍然是hashset, 而没有变成Set,
所以可能出现以上错误,但是这是什么原因呢?怎么改呢?或是有什么地方不多,如果要源码我可以发布上来,希望高手指点!!!!
解决方案 »
- 关于Ajax的一个菜鸟问题
- hibernate判断oracle用户映射表的问题
- ERP和Android和Web开发,前景
- jsp+javabean+servlet 怎么实现查询显示
- hibernate查询问题
- 关于孙卫琴《精通Struts基于MVC的java web设计与开发》中的一点疑问
- tomcat在eclipse中启不来,说是ddress already in use: JVM_Bind:8080
- spring+hibernate问题(初学,大侠们帮忙)
- 编译ejb的报错,那位高手帮忙看看!!
- 巨分求解(200):这是不是包的问题,如果是,怎样解决?
- SmartUpload的问题
- (急!)Spring的处理Servlet的问题,奖分50!
我的测试主程序如下:import java.util.HashSet;
import java.util.Set;
import org.hibernate.HibernateException;
import com.test.hibernate.bo.Address;
import com.test.hibernate.bo.Classes;
import com.test.hibernate.bo.Course;
import com.test.hibernate.bo.User;
import com.test.hibernate.util.HibernateUtil;
public class StartUp {
public static void main(String[] args) throws HibernateException {
org.hibernate.Session session = HibernateUtil.currentSession(); org.hibernate.Transaction tx= session.beginTransaction();
Address address = new Address();
address.setCity("Shanghai");
address.setStreet("road");
address.setZip("100100");
User student = new User();
student.setUserId("2");
student.setSex("male");
student.setBirth("222");
student.setUserName("XiaoMing");
address.setAddressId(student.getUserId());
student.setAddress(address);
Set set=new HashSet();
set.add(student);
Course course = new Course();
course.setCourseId("001");
course.setCourseName("Java");
course.setUser(set);
Classes classes=new Classes();
classes.setClassId("2");
classes.setClassName("000000"); classes.setUser(set);
student.setstClass(classes);
session.save(student);
session.save(address);
session.save(course);
session.save(classes);
tx.commit(); HibernateUtil.closeSession(); }
}
course.setUser(set);
classes.setUser(set);
要是把以上2句不写(不管是否有外键限制),好像就没什么问题,写了就会出现错误。是什么原因阿?
[java] at org.hibernate.type.SortedSetType.wrap(SortedSetType.java:49)
[java] at org.hibernate.event.def.WrapVisitor.processArrayOrNewCollection(WrapVisitor.java:84)
[java] at org.hibernate.event.def.WrapVisitor.processCollection(WrapVisitor.java:51)
[java] at org.hibernate.event.def.AbstractVisitor.processValue(AbstractVisitor.java:101)
[java] at org.hibernate.event.def.WrapVisitor.processValue(WrapVisitor.java:98)
[java] at org.hibernate.event.def.AbstractVisitor.processEntityPropertyValues(AbstractVisitor.java:55)
[java] at org.hibernate.event.def.AbstractSaveEventListener.visitCollectionsBeforeSave(AbstractSaveEventListener.java:332)
[java] at org.hibernate.event.def.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:250)
[java] at org.hibernate.event.def.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:167)
[java] at org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:114)
[java] at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:186)
[java] at org.hibernate.event.def.DefaultSaveEventListener.saveWithGeneratedOrRequestedId(DefaultSaveEventListener.java:33)
[java] at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:175)
[java] at org.hibernate.event.def.DefaultSaveEventListener.performSaveOrUpdate(DefaultSaveEventListener.java:27)
[java] at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:70)
[java] at org.hibernate.impl.SessionImpl.fireSave(SessionImpl.java:524)
[java] at org.hibernate.impl.SessionImpl.save(SessionImpl.java:514)
[java] at org.hibernate.impl.SessionImpl.save(SessionImpl.java:510)
public class Classes {
private String IDF_CLASSID;
private String IDF_CLASSNAME;
private Set User;//=new HashSet();
public Classes(){
}
public void setClassId(String id){
this.IDF_CLASSID=id;
}
/**@hibernate.id column = "classid"
* generator-class = "assigned"
* unsaved-value = "any"
* type = "string"
* @return
*/
public String getClassId(){
return this.IDF_CLASSID;
}
public void setClassName(String classname){
this.IDF_CLASSNAME=classname;
} /**@hibernate.property column = "ClassName"
*type="string"
*
*/
public String getClassName(){
return this.IDF_CLASSNAME;
}
public void setUser(Set user){
this.User=user;
}
/**@hibernate.set table = "user"
* cascade = "all"
* lazy = "false"
* sort = "unsort"
* inverse = "true"
*
* @hibernate.collection-key column = "classid"
*
*
* @hibernate.collection-one-to-many class = "com.test.hibernate.bo.User"
*
*
* @return
*/
public Set getUser(){
return this.User;
}
}
或者支持hibernate的数据类型
collection.至于其他的数据类型,不支持!