Java 冬眠中的投射

Java 冬眠中的投射,java,hibernate,Java,Hibernate,在hibernate中,我有两个班的学生和Mark,他们有一对多的关系 标记类 学生班 我需要的是fname form Student和数据库中的标记详细信息。 由Hibernate条件生成的查询为 Hibernate: select this_.ID as y0_, this_.sub1 as y1_, student1_.fName as y2_ from MARK this_ inner join STUDENT student1_ on this_.student_ID=student1

在hibernate中,我有两个班的学生和Mark,他们有一对多的关系

标记类 学生班 我需要的是fname form Student和数据库中的标记详细信息。 由Hibernate条件生成的查询为

Hibernate: select this_.ID as y0_, this_.sub1 as y1_, student1_.fName as y2_ from MARK this_ inner join STUDENT student1_ on this_.student_ID=student1_.ID
我得到了一个例外:

   org.hibernate.PropertyNotFoundException: Could not find setter for student.fName on class
   at                     org.hibernate.property.ChainedPropertyAccessor.getSetter(ChainedPropertyAccessor.java:67)
   at org.hibernate.transform.AliasToBeanResultTransformer.initialize(AliasToBeanResultTransformer.java:118)
   at org.hibernate.transform.AliasToBeanResultTransformer.transformTuple(AliasToBeanResultTransformer.java:81)
   at org.hibernate.loader.criteria.CriteriaLoader.getResultColumnOrRow(CriteriaLoader.java:158)
   at org.hibernate.loader.Loader.getRowFromResultSet(Loader.java:639)
   at org.hibernate.loader.Loader.doQuery(Loader.java:829)
   at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:274)
   at org.hibernate.loader.Loader.doList(Loader.java:2542)
   at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2276)
   at org.hibernate.loader.Loader.list(Loader.java:2271)
   at org.hibernate.loader.criteria.CriteriaLoader.list(CriteriaLoader.java:119)
   at org.hibernate.impl.SessionImpl.list(SessionImpl.java:1716)
   at org.hibernate.impl.CriteriaImpl.list(CriteriaImpl.java:347)

你做的比应该做的要难得多,而且你也有一些错误

首先,映射是错误的。OneToMany应该是:

@OneToMany(mappedBy = "student")
private List<Mark> marks;

请尝试fname only而不是student.fname尝试将setter方法重命名为setFNameString FNameTanks以供响应人员使用。名称已更改。仍然存在问题。@muthuramperiyaiah您能显示您的更改吗?请尝试将getter\setter从s/getFName更改为s/getfNameThanks,以获得宝贵的时间和清晰的解释。1. @OneToManymappedBy=student=>如果我使用这个,它将变成双向Alloop。所以只有我没有用。2.我在实时项目中遇到错误。为了简单的解释,我尝试了这个例子。无论如何,我会为属性使用更好的名称。3.你确定要提高绩效吗???因为表中有许多数据类型不同的列,比如blob。所以,只有我尝试从该表中获取一个必需的列。4.HQL查询是个好主意,谢谢。但你确定通过标准是不可能的吗?我喜欢在基于对象的环境中工作,这正是您想要的:双向关联。否则,您将有两个完全不同的关联:一个学生将有一些分数,但这些分数不属于该学生。如果您有一个大的blob,那么它确实可能会导致性能问题。但在这种情况下,您可以使该属性延迟加载,或者将其外部化到另一个使用OneToOne连接的实体。这在标准上是绝对可能的,但不是你做这件事的方式。也就是说,如果可以通过HQL查询使代码变得干净和简单,为什么还要使代码变得丑陋和复杂呢?
Hibernate: select this_.ID as y0_, this_.sub1 as y1_, student1_.fName as y2_ from MARK this_ inner join STUDENT student1_ on this_.student_ID=student1_.ID
   org.hibernate.PropertyNotFoundException: Could not find setter for student.fName on class
   at                     org.hibernate.property.ChainedPropertyAccessor.getSetter(ChainedPropertyAccessor.java:67)
   at org.hibernate.transform.AliasToBeanResultTransformer.initialize(AliasToBeanResultTransformer.java:118)
   at org.hibernate.transform.AliasToBeanResultTransformer.transformTuple(AliasToBeanResultTransformer.java:81)
   at org.hibernate.loader.criteria.CriteriaLoader.getResultColumnOrRow(CriteriaLoader.java:158)
   at org.hibernate.loader.Loader.getRowFromResultSet(Loader.java:639)
   at org.hibernate.loader.Loader.doQuery(Loader.java:829)
   at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:274)
   at org.hibernate.loader.Loader.doList(Loader.java:2542)
   at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2276)
   at org.hibernate.loader.Loader.list(Loader.java:2271)
   at org.hibernate.loader.criteria.CriteriaLoader.list(CriteriaLoader.java:119)
   at org.hibernate.impl.SessionImpl.list(SessionImpl.java:1716)
   at org.hibernate.impl.CriteriaImpl.list(CriteriaImpl.java:347)
@OneToMany(mappedBy = "student")
private List<Mark> marks;
select m from Mark m left join fetch m.student