Frage

Ich bin nicht sicher, was ich falsch mache, aber ich habe eine Klasse, die eine Klasse in sich hat, so, wenn ich speichern die Fähigkeit Klasse auch die Benutzerklasse erstellt wird, so dass, wenn ich das tun beitreten und ich möchte Pull alles in zu einer Zeit, ich habe einen Classcast erhalten.

Dies ist, wie ich meine Abfrage nenne.

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]

Das ist meine Abfrage: <query><![CDATA[from Skill a JOIN a.user u WHERE u.username=:username]]></query>

Dies ist, was Hibernate ist eigentlich in meinem Test zu tun:

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

Ich erwarte, dass das Problem ist, alle die benutzer1 Teile in der Auswahl.

Die Fähigkeit Klasse hat nur einige Setter / Getter, im Grunde, so dass ich die meisten der Anmerkungen entfernt, aber der Fremdschlüssel ein:

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

Dies ist die User-Klasse:

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

Das ist mein Fehler:

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

Ich würde lieber nicht nur die Fähigkeit Attribute auswählen und dann eine weitere Abfrage für den Benutzer zu tun haben, so dass weniger effizient sein wird, wie meine Klassen komplizierter.

War es hilfreich?

Lösung

Sie sind die Auswahl beide Skill und User und ein Objekt-Array, das sowohl als Elemente immer wieder.

Sie können entweder behandeln sie als solche oder neu schreiben Sie Ihre Abfrage ein wenig:

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

nur Skill wählen, sondern holen und seine User Vereinigung füllen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top