Domanda

Io non sono certo quello che sto facendo male, ma ho una classe che ha una classe al suo interno, così quando ho salvare la classe di abilità della classe utente viene inoltre creato, in modo che quando faccio il unisco e voglio tirare tutto in una volta, ho un ClassCastException.

Questo è come io chiamo la mia domanda.

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]

Questa è la mia domanda: <query><![CDATA[from Skill a JOIN a.user u WHERE u.username=:username]]></query>

Questo è ciò che Hibernate è in realtà facendo nel mio test:

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=?

Mi aspetto che il problema è di tutte le parti USER1 nella selezione.

La classe di abilità ha appena alcuni setter / getter, in fondo, così ho tolto la maggior parte delle annotazioni, ma l'estero una chiave:

  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 = _

Questa è la classe utente:

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

Questo è il mio errore:

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

avrei preferito non è sufficiente selezionare la Skill attributi e quindi hanno a che fare un'altra query per l'utente, come che sarà meno efficiente come le mie lezioni diventano più complicate.

È stato utile?

Soluzione

Si sta selezionando sia e Skill User e tornare una matrice di oggetti che contiene sia come elementi.

È possibile trattarlo come tale o riscrivere la query un po ':

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

per selezionare solo Skill ma prendere e popolare la sua associazione User.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top