IllegalArgumentException in der Klasse: ..., getter-Methode der Eigenschaft: id
stehe vor einem seltsamen problem, ich habe gegoogelt, es für Stunden, aber habe nicht herausfinden, wie es zu lösen.
Hier ist die situation : ich habe zwei Klasse Roles
und Privileges
mit der ManyToMany relation. Beim hinzufügen einer Berechtigung zu einer Rolle, die Berufung saveOrUpdate(role)
kam ich in diese Ausnahme.
hier ist die Rolle Klasse
@Entity
@Table(name = "ROLES")
public class Role implements GenericDomain {
private static final long serialVersionUID = -7620550658984151796L;
private Long id;
private String code;
private String name;
private Set<User> users = new HashSet<User>(0);
private Set<Privilege> privileges = new HashSet<Privilege>(0);
public Role() {
}
public Role(String code, String name) {
this.code = code;
this.name = name;
}
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
@Column(name = "ID")
public Long getId() { return id; }
public void setId(Long id) { this.id = id; }
@Column(name = "CODE", unique = true, nullable = false, length = 16)
@NotEmpty(message= "password.required")
@Length(min = 3, max = 16)
public String getCode() { return code; }
public void setCode(String code) { this.code = code; }
@Column(name="NAME", nullable = false, length = 64)
@NotEmpty
@Length(min = 1, max = 32)
public String getName() { return name; }
public void setName(String name) { this.name = name; }
@ManyToMany(cascade=CascadeType.ALL)
@JoinTable(name = "ROLES_PRIVILEGES"
, joinColumns = { @JoinColumn(name = "ROLE_ID") }
, inverseJoinColumns = { @JoinColumn(name = "PRIVILEGE_ID") }
)
public Set<Privilege> getPrivileges() {
return this.privileges;
}
public void setPrivileges(Set<Privilege> privileges) {
this.privileges = privileges;
}
/* overide of hascode, equals*/
}
Hier ist die Privilegien-Klasse
@Entity
@Table(name = "PRIVILEGES")
public class Privilege implements GenericDomain {
private static final long serialVersionUID = 4649689934972816194L;
private Long id;
private String code;
private Set<Role> roles = new HashSet<Role>(0);
public Privilege() {
}
public Privilege(String code) {
this.code = code;
}
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
@Column(name = "ID")
public Long getId() { return id; }
public void setId(Long id) { this.id = id; }
@Column(name = "CODE", unique = true, nullable = false, length = 16)
@NotEmpty(message= "password.required")
@Length(min = 3, max = 16)
public String getCode() { return code; }
public void setCode(String code) { this.code = code; }
@ManyToMany(cascade=CascadeType.REFRESH, mappedBy="privileges")
public Set<Role> getRoles() {
return this.roles;
}
public void setRoles(Set<Role> roles) {
this.roles = roles;
}
/*overide equals and hascode*/
}
Und hier ist die Ausnahme :
IllegalArgumentException in class: com.stunaz.domain.Privilege, getter method of property: id
....
javax.persistence.PersistenceException: org.hibernate.PropertyAccessException: IllegalArgumentException occurred calling getter of com.stunaz.domain.Privilege.id
....
java.lang.IllegalArgumentException: object is not an instance of declaring class
Sein scheint, etwas falsch mit meiner Zuordnung, irgendwo sollte ich ein Objekt übergeben, aber ich bin die übergabe einer Id.aber ich sehe nicht, dass Fehler.
Dank für jede raten.
Ich definiert den code, so wie du bist zu tun in deinem Beispiel und es funktionierte gut für mich. Vielleicht können Sie zeigt die Methode saveOrUpdate, dass Sie erwähnen in Ihrem Beitrag. Vielleicht wird das problem da ist.
ja du hast Recht alles kein problem mit hibernate
Hast du dieses problem lösen? Ich bin mit dem gleichen Fehler in meinem Projekt.
ja du hast Recht alles kein problem mit hibernate
Hast du dieses problem lösen? Ich bin mit dem gleichen Fehler in meinem Projekt.
InformationsquelleAutor storm_buster | 2011-04-17
Du musst angemeldet sein, um einen Kommentar abzugeben.
Überwintern ist nicht sehr benutzerfreundlich, wenn es darum geht, zu sagen, Benutzer, was falsch ist mit der Zuordnung.
Lösung:
Durch dieses Verfahren habe ich herausgefunden, was falsch war mit meinem mapping.
Im Allgemeinen, von dem, was ich gesehen habe, ist es meistens falsch-Klasse explizit angegeben irgendwo, wie
@MapKeyClass(Wrong.class)
wenn der Schlüssel tatsächlichString
etc.Oder Aufruf falsch (Hibernate) - API, wie
setParameter()
stattsetParameterList()
:Oder, im Fall von Kriterien API, die ich gesehen habe:
InformationsquelleAutor Ondra Žižka
Um eine illegal argument exception aufrufen der getId () - Methode, scheint es, dass Hibernate denkt, der Typ Ihres id ist etwas anderes als Lange (vermutlich Integer). Vielleicht versuchen Sie
@Type(type="long")
zu Ihrer ids.Immer, wenn ich komische Probleme mit dem Ruhezustand, habe ich immer zuerst den Quellcode und debug um, wo der Fehler passiert. Dies kann Ihnen einen Einblick in das, was Hibernate ist, der versucht zu tun, und helfen, herauszufinden, wo können Sie etwas verpasst haben, oder übergeben Sie einen ungültigen argument irgendwo.
InformationsquelleAutor Sean Adkinson
Auf den ersten Blick dein code scheint in Ordnung, außer vielleicht für:
Ich bin mir nicht sicher, ob dies ist falsch, aber das ist die Art, wie ich es mache:
Diese mappedBy-Eigenschaft könnte auch weggelassen werden...
InformationsquelleAutor Stijn Geukens
Wie sind Sie auf speichern/aktualisieren?
Sind Sie immer der 'Rolle' - Objekt, für das Sie möchten, speichern Sie die 'Erlaubnis' durch aufrufen findById(Long roleId)? Sobald du das role-Objekt erstellen Sie ein neues Berechtigungsobjekt und setRole(Rolle) und legen Sie die anderen Eigenschaften und callthe saveOrUpdate(Erlaubnis)? Das sollte funktionieren.
InformationsquelleAutor Mukus
Nur ein Hinweis für andere, obwohl dies vielleicht nicht im Zusammenhang mit diesem problem. Es mir passiert, dass ich die Zuordnung eines DTO aus einer REST-API, um eine Entität. Einer der Kind DTOs wurde nicht richtig zugeordnet, um eine Kind-Entität (ich war mit Raupen). Hibernate ist fehlgeschlagen, da die id von der DTO nicht kompatibel mit der id der Entität.
InformationsquelleAutor k_o_