在我的Spring-Hibernate应用程序中,我有4个bean类,如UserVO,BookVO,AttandanceVO和Timetable。
和我的AttendanceVO bean类:
@ManyToOne
@JoinColumn(name="BOOK_ID")
private BookVO book;
//Setters and getters.
和我的BookVO bean类:
@ManyToOne
@JoinColumn(name = "USER_ID")
private UserVO user;
@ManyToOne
@JoinColumn(name = "Time_ID")
private TimeTable timetable;
//Setters and getters
在我的Hibernate类中,我正在编写查询..
@Transactional
public List<AttendanceVO> findAttendanceList(UserVO user){
TypedQuery<AttendanceVO> query = entityManager.createQuery("select av from AttendanceVO av inner join av.book bb where bb.user=:user",
AttendanceVO.class);
query.setParameter("user", user);
return query.getResultList();
}
但我得到像Exception一样的例外。
SEVERE: Servlet.service() for servlet [spring] in context with path [/EClass] threw exception [Request processing failed; nested exception is javax.persistence.PersistenceException: org.hibernate.exception.GenericJDBCException: could not load an entity: [com.sits.ec.valueObjects.BookVO#A2]] with root cause
java.sql.SQLException: Invalid value for getInt() - 'T2'
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1073)
..............
实际上T2是时间表ID,为什么T2会听到我的查询中没有包含时间表..
他们需要任何映射吗?
Edit 1:
@Entity
@Table(name = "BOOK")
public class BookVO{
@ManyToOne
@JoinColumn(name = "USER_ID")
private UserVO user;
@ManyToOne
@JoinColumn(name = "TIMETABLE_ID")
private TimetableVO timetable;
//Setters and getters
}
答案 0 :(得分:0)
我的猜测是DB中有一些空值。当hibernate尝试使用类整数字段进行映射时,它会抛出此异常。这就是发生在我身上的事。我在select caluse中使用下面明确处理null值
ISNULL("column having null value", 0)
答案 1 :(得分:0)
我认为你不能将UserVO映射到DB原语类型,你应该检查USER_ID列的数据类型,并将该类型映射到你的代码。 尝试确定从休眠到数据库的地图类型。