@SecondaryTable Problem

Acasta89

Mitglied
Hallo zuzsammen,

mein Problem kurz beschrieben:
Ich habe eine Entityklasse die mit einer Datenbanktabelle gemappt ist. Jetzt brauche ich für eine Ansicht im Frontend Daten aus einer anderen Tabelle.

Die Annotation @SecondaryTable war schnell gefunden. Problem ist aber, dass der resultierende INNER JOIN, den diese Annotation bietet bei jeder SQL Abfrage ausgeführt wird.

Dies habe ich an einer Exception gesehen, wo der INNER JOIN neben meiner WHERE Klausel ebenfalls ausgeführt wurde. Dabei hatte diese Abfrage nur Daten aus der Primary Table geholt. Deswegen komme ich zu dem entschluss, dass der INNER JOIN immer mitausgeführt wird.

Wie kann ich diese @SecondaryTable also besser unter Kontrolle bringen?
 
Ok...ich kann dir so leider nciht weiterhelfen, aber könntest du bitte Quelltext posten, dann ginge es vlt einfacher, dann ich rumprobieren mit meinen ideen
 
Java:
@Entity
@Table(name = "Employee")
@SecondaryTable(name = "Sales",
pkJoinColumns =
@PrimaryKeyJoinColumn(name = "fkEmployeeID"))
@NamedQueries(value = {
    @NamedQuery(name = "findByEmployeeNr",
    query = "select e.employeeNr, e.employeeName from Employee e where e.employeeNr = :eNr")
    @NamedQuery(name = "findByJoin",
    query = "select e.employeeNr, e.saleNr from Employeee")
})
public class Employee implements Serializable {

    private static final long serialVersionUID = 1L;
    @Id
    @Basic(optional = false)
    @Column(name = "EmployeeID")
    private String employeeID;
    @Column(name = "Number")
    private double employeeNr;
    @Column(name = "Name")
    private String employeeName;
    @Column(name = "Salenumber", table = "Sales")
    private double saleNr;

    public Employee() {
    }

    public Employee(String employeeID) {
        this.employeeID= employeeID;
    }

    public String getEmployeeID() {
        return employeeID;
    }

    public void setEmployeeID(String employeeID) {
        this.employeeID= employeeID;
    }

    public Double getEmployeeNr() {
        return employeeNr;
    }

    public void setEmployeeNr(Double employeeNr) {
        this.employeeNr= employeeNr;
    }
    public String getEmployeeName() {
        return employeeName;
    }

    public void setEmployeeName(String employeeName) {
        this.employeeName= employeeName;
    }
    public Double getSaleNr() {
        return saleNr;
    }

    public void setSaleNr(Double saleNr) {
        this.saleNr= saleNr;
    }
 
Ich glaube du bist übers Ziel geschossen. Wenn es nur eine Datenhaltung ist für "wer hat welchen verkauf getätigt", dann reicht doch eine
Code:
OneToMany
und wenn du auch die Artikel sowie den Kunden zu dem Verkauf speichern willst, dann machste halt
Code:
ManyToMany
, prompt biste fein raus.
 
Joa, Problem an der Geschichte ist, dass dies ein Produktionssystem (ich habe dies natürlich etwas vereinfacht) meines Unternehmens ist und ich an der Datenbank nichts ändern darf.

Ich muss Daten aus Employee und Sales an die JSF Oberfäche bekommen. Mittlerweile habe ich das Problem mit einer Doppel-SQL-Abfrage gelöst. Denn in der Tabelle Sales steht der fkEmployee. Den brauche ich erstmal um eine Range von Datensäzen an die Oberfläche zu bekommen.

Der Benutzer gibt im Frontend die Mitarbeiternummer ein (ist ja nicht gleich die ID). Die Nummer steht jedoch nicht in der Sales-Tabelle. Ich habe also erstmal eine SQL1 (ich gebe die Nummer als Paramter vor und bekomme die ID dazu zurück) und einmal eine SQL2 (mit der ID hole ich mir Datensätze die diese fkID in der Sales Tabelle haben). Sauber ist das aber nicht, oder?

Hoffe ich habe das Problem nun etwas näher beleuchtet.
 
Ja ich bin davon ausgegangen das du nicht nur ne Fassade machst, ok, dann ist das wirklich nciht die beste Lösung, aber ich wüsste jetzt nicht wie besser. Da Musste ja wirklich die Klassen aus der DB heraus erstellen, Netbeans hat soweit ich weiß dafür nen Wizard, aber wie das bei deiner IDE aussieht, ...ka
 
Trotzdem danke für deine Hilfe bisher. Ich benutze sogar Netbeans und habe auch per Wizard meine Entityklassen erstellt.

Dennoch habe ich das ganze Verfahren mit dieser @SecondaryTable noch nicht so ganz durchblickt. Sobald ich etwas neues herausfinde, melde ich mich nochmal.
 
IMHO ist @SecondaryTable falsch für das was du möchtest, du möchtest eigentlich eine Relation darstellen, @OneToMany.

Sehe nicht wieso du deshalb das Schema ändern müsstest, aber diese Infos haben wir hier ja nicht 😉
 

Zurück
Oben