我的项目中的所有CRUD操作都使用Hibernate。它不适用于一对多和多对一的关系。它给了我以下的错误
org.hibernate.MappingException:无法确定列:[org.hibernate.mapping.Column(students)]的类型:java.util.List,在表:College中
然后我又看了一遍这个视频教程。一开始对我来说很简单。但是,我不能让它工作。他说,现在也是这样
org.hibernate.MappingException:无法确定列:[org.hibernate.mapping.Column(students)]的类型:java.util.List,在表:College中
我在互联网上做了一些搜索,有人告诉我这是Hibernate中的一个bug,有人说,通过添加@GeneratedValue,这个错误会被清除,但对我来说不起作用
College.java
@实体
公立学院{
@身份证
@GeneratedValue(策略=GenerationType.AUTO)
私立大学;
私有字符串集合名;
私人名单<;学生>;学生;
@OneToMany(targetEntity=Student.class,mappedBy=“college”,fetch=FetchType.EAGER)
公共列表<;学生>;获取学生(){
留学生;
}
公立学校学生(名单<;学生>;学生){
这个。学生=学生;
}//省略了其他getter和setter
Student.java
@实体
公立班学生{
@身份证
@GeneratedValue(策略=GenerationType.AUTO)
私立国际学生;
私有字符串studentName;
私立学院;
@许多酮
@JoinColumn(name=“collegeId”)
公立学院{
返回学院;
}
公立学校(学院){
这个学院=学院;
}//省略了其他getter和setter
Main.java:
公共类主{
私有静态org.hibernate.SessionFactory SessionFactory;
公共静态SessionFactory getSessionFactory(){
if(sessionFactory==null){
initSessionFactory();
}
返回工厂;
}
私有静态同步void initSessionFactory(){
sessionFactory=new AnnotationConfiguration().configure().buildSessionFactory();
}
公共静态会话getSession(){
返回getSessionFactory().openSession();
}
公共静态void main(字符串[]args){
Session=getSession();
事务=会话。beginTransaction();
学院=新学院();
学院名称(“MCET博士”);
学生1=新学生();
学生1.设置学生姓名(“彼得”);
学生2=新学生();
学生2.设置学生姓名(“约翰”);
学生1.学院(学院);
学生2.学院(学院);
会话。保存(学生1);
会话。保存(学生2);
commit();
}
}
控制台:
线程“main”org.hibernate.MappingException中的异常:无法确定以下列的类型:java.util.List,位于表:College:[org.hibernate.mapping.Column(学生)]
位于org.hibernate.mapping.SimpleValue.getType(SimpleValue.java:306)
位于org.hibernate.mapping.SimpleValue.isValid(SimpleValue.java:290)
位于org.hibernate.mapping.Property.isValid(Property.java:217)
位于org.hibernate.mapping.PersistentClass.validate(PersistentClass.java:463)
位于org.hibernate.mapping.RootClass.validate(RootClass.java:235)
位于org.hibernate.cfg.Configuration.validate(Configuration.java:1330)
位于org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1833)
位于test.hibernate.Main.initSessionFactory(Main.java:22)
位于test.hibernate.Main.getSessionFactory(Main.java:16)
位于test.hibernate.Main.getSession(Main.java:27)
at test.hibernate.Main.Main(Main.java:43)
XML:
<;?xml版本='1.0'编码='utf-8'?>;
<;!DOCTYPE hibernate配置公用
“-//Hibernate/Hibernate配置DTD 3.0//EN”
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd“>;
<;休眠配置>;
<;会话工厂>;
<;!--数据库连接设置-->;
&connection=“jdbc.com.property”<;/jdbc.com>;
<;property name=“connection.url”>;jdbc:mysql://localhost:3306/dummy</property>;
<;property name=“connection.username”>;root<;/property>;
<;property name=“connection.password”>;1234<;/property>;
<;!--JDBC连接池(使用内置接口)-->;
<;property name=“connection.pool\u size”1<;/property>;
<;!--SQL方言-->;
<;property name=“dialogue”>;org.hibernate.dialogue.mysqldialogue<;/property>;
<;!--启用Hibernate的自动会话上下文管理-->;
<;property name=“当前会话上下文类”>;线程<;/property>;
<;!--禁用二级缓存-->;
<;property name=“cache.provider\u class”>;org.hibernate.cache.NoCacheProvider<;/property>;
<;!--将所有执行的SQL回显到标准输出-->;
<;property name=“show\u sql”>;true<;/property>;
<;!--在启动时删除并重新创建数据库架构-->;
<;property name=“hbm2ddl.auto”更新<;/property>;
<;mapping class=“test.hibernate.Student”/>;
<;mapping class=“test.hibernate.College”/>;
<;/session factory>;
您正在使用字段访问策略(由@Id annotation确定)。将任何与JPA相关的批注放在每个字段的正上方,而不是getter属性
@OneToMany(targetEntity=Student.class,mappedBy=“college”,fetch=FetchType.EAGER)
私人名单<;学生>;学生;