我不能肯定我在做什么错的,但我有一个在其内具有一类的类,所以当我保存用户类也被创建技能类,所以当我做加盟,我想拉一切都在在同一时间,我得到一个ClassCastException。

这是我如何打电话给我的查询。

val retrieved_obj = em.createNamedQuery("findAllSkillsByUser").setParameter("username", user.username ).getResultList().asInstanceOf[java.util.List[Skill]]
assertEquals(1, retrieved_obj.size())
val retrieved = retrieved_obj.get(0).asInstanceOf[Skill]

这是我的查询: <query><![CDATA[from Skill a JOIN a.user u WHERE u.username=:username]]></query>

这是什么休眠其实就是做在我的测试:

Hibernate: insert into users (firstName, lastName, username, id) values (?, ?, ?, ?)
Hibernate: insert into skills (datestarted, name, position, rating, skill_user_fk, id) values (?, ?, ?, ?, ?, ?)
Hibernate: select skill0_.id as id64_0_, user1_.id as id63_1_, skill0_.datestarted as datestar2_64_0_, skill0_.name as name64_0_, skill0_.position as position64_0_, skill0_.rating as rating64_0_, skill0_.skill_user_fk as skill6_64_0_, user1_.firstName as firstName63_1_, user1_.lastName as lastName63_1_, user1_.username as username63_1_ from skills skill0_ inner join users user1_ on skill0_.skill_user_fk=user1_.id where user1_.username=?

我期望的问题是在选择中的所有用户1的部件。

在技能类只是有一些制定者/吸气,基本上,所以我删除大部分的注释,但外键之一:

  var id : Int = _
  var name : String = ""
  var position : Int = _
  var dateStarted : Date = new Date()
  var rating : SkillRating.Value = SkillRating.unknown

  @OneToOne{val fetch = FetchType.EAGER, val cascade=Array(CascadeType.PERSIST, CascadeType.REMOVE)}
  @JoinColumn{val name = "skill_user_fk", val nullable = false}
  var user : User = _

这是在用户类:

  var id : Int = _
  var firstName : String = ""
  var lastName : String = ""
  var username : String = ""

这是我的错误:

java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to jblack.resumeapp.lift.model.Skill

我宁愿不只是选择的技能属性,然后必须做对用户的另一个查询,因为这将是效率较低我的课变得更加复杂。

有帮助吗?

解决方案

您正在选择的两个 SkillUser和得到同时含有作为元件的对象阵列。

您可以把它当作这样或重写查询了一下:

select a from Skill a JOIN FETCH a.user u WHERE u.username=:username

以仅选择Skill但取和填充其User关联。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top