2016-11-05 1 views
0

Ich entwickle eine einfache Java EE-Anwendung, die Datenbank verwendet. Es hat zwei Tabellen (Admin- und Session-Signatur), die mit einer Beziehung von vielen zu eins verbunden sind.Eclipse 'Entitäten aus Tabellen generieren' und 'viele zu eins' Relation

Wenn ich Eclipse verwendet Einheiten von Tabellen zu erzeugen, mein Attribut, dass links beide Tabellen wie folgt erzeugt wurde:

//bi-directional many-to-one association to Admin 
@ManyToOne 
@JoinColumn(name="owner") 
private Admin admin; 

Problem ist, mein owner Attribut ist Integer in der Datenbank, und es hat sich als Admin erstellt Art.

Nun, wenn ich einige Integer-Variable zur Eingabe übergeben wollen, es zu Datenbank erhalte ich Fehler:

The method setAdmin(Admin) in the type Signaturesession is not applicable for arguments (int). 

Oder wenn ich es (Admin) so werfen wollen (es von Sitzung nehmen):

(Admin)session.getAttribute("adminId") 

bekomme ich Jboss Fehler:

javax.servlet.ServletException: java.lang.ClassCastException: java.lang.Integer cannot be cast to com.podpisy.entities.Admin 
javax.faces.webapp.FacesServlet.service(FacesServlet.java:606) 
secure.SecurityCheckFilter.doFilter(SecurityCheckFilter.java:100) 

ich bin sicher, dass dies einfach tun, aber ich bin einfach wirklich schlecht mit Java.

Danke für jede Hilfe.

EDIT:

Meine Admin.java Klasse:

package com.podpisy.entities; 

import java.io.Serializable; 
import javax.persistence.*; 
import java.util.List; 


@Entity 
@Table(name="admins") 
@NamedQuery(name="Admin.findAll", query="SELECT a FROM Admin a") 
public class Admin implements Serializable { 
    private static final long serialVersionUID = 1L; 

    @Id 
    private int id; 

    private String login; 

    private String password; 

    //bi-directional many-to-one association to Signature 
    @OneToMany(mappedBy="admin") 
    private List<Signature> signatures; 

    //bi-directional many-to-one association to Signaturesession 
    @OneToMany(mappedBy="admin") 
    private List<Signaturesession> signaturesessions; 

    public Admin() { 
    } 

    public int getId() { 
     return this.id; 
    } 

    public void setId(int id) { 
     this.id = id; 
    } 

    public String getLogin() { 
     return this.login; 
    } 

    public void setLogin(String login) { 
     this.login = login; 
    } 

    public String getPassword() { 
     return this.password; 
    } 

    public void setPassword(String password) { 
     this.password = password; 
    } 

    public List<Signature> getSignatures() { 
     return this.signatures; 
    } 

    public void setSignatures(List<Signature> signatures) { 
     this.signatures = signatures; 
    } 

    public Signature addSignature(Signature signature) { 
     getSignatures().add(signature); 
     signature.setAdmin(this); 

     return signature; 
    } 

    public Signature removeSignature(Signature signature) { 
     getSignatures().remove(signature); 
     signature.setAdmin(null); 

     return signature; 
    } 

    public List<Signaturesession> getSignaturesessions() { 
     return this.signaturesessions; 
    } 

    public void setSignaturesessions(List<Signaturesession> signaturesessions) { 
     this.signaturesessions = signaturesessions; 
    } 

    public Signaturesession addSignaturesession(Signaturesession signaturesession) { 
     getSignaturesessions().add(signaturesession); 
     signaturesession.setAdmin(this); 

     return signaturesession; 
    } 

    public Signaturesession removeSignaturesession(Signaturesession signaturesession) { 
     getSignaturesessions().remove(signaturesession); 
     signaturesession.setAdmin(null); 

     return signaturesession; 
    } 

} 

Mein Signaturesession.class:

package com.podpisy.entities; 

import java.io.Serializable; 

import javax.persistence.*; 


/** 
* The persistent class for the signaturesession database table. 
* 
*/ 
@Entity 
@NamedQuery(name="Signaturesession.findAll", query="SELECT s FROM Signaturesession s") 
public class Signaturesession implements Serializable { 
    private static final long serialVersionUID = 1L; 

    @Id 
    private int id; 

    private String device; 

    private String name; 

    private int signatures; 

    private int time; 

    private String type; 

    private int users; 

    //bi-directional many-to-one association to Admin 
    @ManyToOne 
    @JoinColumn(name="owner") 
    private Admin admin; 

    public Signaturesession() { 
    } 

    public int getId() { 
     return this.id; 
    } 

    public void setId(int id) { 
     this.id = id; 
    } 

    public String getDevice() { 
     return this.device; 
    } 

    public void setDevice(String device) { 
     this.device = device; 
    } 

    public String getName() { 
     return this.name; 
    } 

    public void setName(String name) { 
     this.name = name; 
    } 

    public int getSignatures() { 
     return this.signatures; 
    } 

    public void setSignatures(int signatures) { 
     this.signatures = signatures; 
    } 

    public int getTime() { 
     return this.time; 
    } 

    public void setTime(int time) { 
     this.time = time; 
    } 

    public String getType() { 
     return this.type; 
    } 

    public void setType(String type) { 
     this.type = type; 
    } 

    public int getUsers() { 
     return this.users; 
    } 

    public void setUsers(int users) { 
     this.users = users; 
    } 

    public Admin getAdmin() { 
     return this.admin; 
    } 

    public void setAdmin(Admin admin) { 
     this.admin = admin; 
    } 

} 

Antwort

1

Sie sollten ein Admin Objekt übergeben, die sicherlich einen int id-Feld hat.

So haben Sie so etwas wie dieses

Admin myAdmin=new Admin(id,.. other properties); 
    mySignaturesession.setAdmin(myAdmin); 

EDIT

Oben ist dann gültig, wenn Sie zu Ihrem SignatureSession Objekt verknüpfen und Admin machen wollen. Stattdessen, wenn Sie einen Admin ojbect in Session haben Sie müssen nur

 Admin anAdmin=(Admin)session.getAttibute("adminId"); 
     Admin myAdmin=new Admin(id,.. other properties); 

oder Admin MyAdmin = new Admin() auszuführen; myAdmin.setId (anId);

Aber ich wiederhole, es hängt davon ab, was Sie in der Sitzung haben und welche Objekte Sie behandeln. Und wenn Sie JPA verwenden, vergessen Sie nicht, etwas wie em.persist oder em.merge auf Ihre Objekte zu tun. Vielleicht sollten Sie ein wenig tiefer gehen, wie JPA funktioniert.

+0

So ähnlich? Admin myAdmin = neuer Admin(); \t \t HttpSession Sitzung = (HttpSession) FacesContext.getCurrentInstance(). GetExternalContext(). GetSession (true); \t \t ID2 = (Admin) Sitzung.getAttribute ("adminId"); \t \t myAdmin.id = id2; \t \t session.setAdmin (myAdmin); – Macjej

+0

Verdammt, ich kann es nicht in verschiedenen Zeilen in Kommentaren platzieren. Ich bekomme 'das Feld Admin.id ist nicht sichtbar'. Es ist standardmäßig auf "Privat" eingestellt. – Macjej

+0

So etwas sieht seltsam aus, kannst du bitte die 2 Klassen Definitionen posten, was die Admin Klasse und die Sessionsignature Klasse bedeutet – Massimo

Verwandte Themen