Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/wordpress/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 冬眠:@manytone,@OneToMany在结果中给出空值_Java_Mysql_Spring_Hibernate_Jpa - Fatal编程技术网

Java 冬眠:@manytone,@OneToMany在结果中给出空值

Java 冬眠:@manytone,@OneToMany在结果中给出空值,java,mysql,spring,hibernate,jpa,Java,Mysql,Spring,Hibernate,Jpa,我有java应用程序(Spring+Hibernate)和mySql数据库。 弹簧:5.0.2 冬眠:5.2.12 有两个实体:学生和课程。它们是相关的:一个学生上多节课(课表中的外键)。 代码: @实体 @表(name=“学生”) @XmlRootElement 公共类学生实现可序列化{ 私有静态最终长serialVersionUID=1L; @身份证 @基本(可选=假) @列(name=“student\u id”) 私人字符串学生ID; @OneToMany(cascade=Cascade

我有java应用程序(Spring+Hibernate)和mySql数据库。
弹簧:5.0.2
冬眠:5.2.12

有两个实体:学生和课程。它们是相关的:一个学生上多节课(课表中的外键)。
代码:

@实体
@表(name=“学生”)
@XmlRootElement
公共类学生实现可序列化{
私有静态最终长serialVersionUID=1L;
@身份证
@基本(可选=假)
@列(name=“student\u id”)
私人字符串学生ID;
@OneToMany(cascade=CascadeType.ALL,mappedBy=“studentId”)
私人藏书;lessonCollection;
// ......
}    

@实体
@表(name=“课程”)
@XmlRootElement
公共类课程实现了可序列化{
私有静态最终长serialVersionUID=1L;
@身份证
@基本(可选=假)
@列(name=“lesson\u id”)
私有字符串lessonId;
@JoinColumn(name=“学生id”,referencedColumnName=“学生id”)
@多通(可选=假)
私立学生;
@基本(可选=假)
@列(name=“number”)
私有整数;
// ......
}
在DB中,填写学生和课程的所有字段

我可以成功地选择所有符合API标准的学生。 但当我选择课程(一个/所有)时,我有一个休眠异常:
org.hibernate.Property.AccessException:为org.Lesson.number的基元类型setter的属性[class org.Lesson.number]分配了空值。

如果我将字段“number”更改为整数(可为null),则会得到这样的结果:
[null,null,null]
使用HQL发出请求会得到相同的结果

有人能给出建议吗?实体及其关系有什么问题?
先走一步

UPD:
获取结果的代码:

public List<E> getAll() throws SQLException {
   CriteriaBuilder builder = curSession().getCriteriaBuilder();
   CriteriaQuery<? extends E> criteriaQuery = builder.createQuery(daoType);
   criteriaQuery.from(daoType);
   Query query = curSession().createQuery(criteriaQuery);
   try {
        System.out.println(query.getResultList());
   } catch (Throwable e) {
        throw new SQLException(e.getMessage()); // that's where it's fire
   }
}
public List getAll()引发SQLException{
CriteriaBuilder=curSession().getCriteriaBuilder();

CriteriaQuery默认情况下,
@OneToMany
FetchType
Lazy
。因此不会加载它。请按如下所示更改映射。注意:
FetchType
指定为
Eager

@OneToMany(cascade = CascadeType.ALL, mappedBy = "studentId",fetch=FetchType.LAZY)
   private Collection<Lesson> lessonCollection;
@OneToMany(cascade=CascadeType.ALL,mappedBy=“studentId”,fetch=FetchType.LAZY)
私人藏书;lessonCollection;

getLessonCollection
将返回代理对象,该代理对象将具有实际对象的加载数据。

默认情况下
@OneToMany
FetchType
Lazy
。因此它不会被加载。请按如下所示更改映射。注意:
FetchType
被指定为
Eager

@OneToMany(cascade = CascadeType.ALL, mappedBy = "studentId",fetch=FetchType.LAZY)
   private Collection<Lesson> lessonCollection;
@OneToMany(cascade=CascadeType.ALL,mappedBy=“studentId”,fetch=FetchType.LAZY)
私人藏书;lessonCollection;

getLessonCollection
将返回代理对象,该代理对象将包含实际对象的加载数据。

发布您的代码,包括显示结果的语句。准确地告诉您预期的结果以及实际结果。此外,请将
studentId
重命名为
student
。它是studen,而不是student一个学生ID。已经更新了post,包括显示结果的语句。准确地告诉你期望的结果是什么,以及它实际上是什么。不要捕获Throwable。让异常传播,如果你有异常,发布它的堆栈跟踪。已经更新的post我想你已经知道如何修复这个异常:一个p基本整数不可能包含null,因此,如果列可为null,则类型应为整数。如果此列中不应存在null,则应向列添加not null约束,以使其不可能存在,并且应修复数据。发布代码,包括显示结果的语句。准确地告诉您不希望结果是什么,它实际上是什么。另外,请将
studentId
重命名为
student
。这是一个studen,而不是一个student ID。已经更新了帖子,包括显示结果的语句。准确地告诉您希望结果是什么,以及它实际上是什么。不要捕获Throwable。让异常传播,如果您有异常,请发布其堆栈跟踪。已更新的post我认为您已经知道如何修复此异常:原始整数不可能包含null,因此如果列可为null,则类型应为整数。如果此列中不应存在null,则应向co添加not null约束为了使这不可能,数据应该是固定的。Big thanx。但是……你写了:“注意:FetchType被指定为渴望。”在你的代码片段中是“fetch=FetchType.LAZY”。真的在哪里?哦,对不起。
FetchType.Earge
我是指Big thanx。但是……你写了:“注意:FetchType被指定为渴望。”在你的代码片段中是“fetch=FetchType.LAZY”。真实情况在哪里?哦,对不起..
FetchType.Eager
我是说
@OneToMany(cascade = CascadeType.ALL, mappedBy = "studentId",fetch=FetchType.LAZY)
   private Collection<Lesson> lessonCollection;