2017-08-02 10 views
0

ich zur Zeit Dateien Anmerkungen winter .hbm.xml bin Umwandlung und ein Problem sehr ähnlich hat diesen Adding a calculated field on jpa + jacksonHibernate/JPA ein berechnetes Feld hinzufügen

ich eine DB-Tabelle mit einigen Feldern einschließlich first_name und last_name habe , also sollten diese Felder persistent sein (das funktioniert wie erwartet).

Aber jetzt habe ich eine Methode getFullName bekam()

// ????? 
public String getFullName() { 
    return getFirstName() + " " + getLastName(); 
} 

Und ich weiß nicht, welche Anmerkung I der Methode hinzufügen sollten? (Versuchte @Transient, @Formula, @Basic, @Column sollte .... fullname nicht persistent)

Das Problem ist, dass ich die Verwendung fullname einen Auftrag

Order.asc("fullName"); 

und dann erstellen Verwenden Sie es in der Methode

public List<Student> findAll(Session session, Order order) { 
    Criteria crit = session.createCriteria(Student.class); 
    if (null != order) { 
    crit.addOrder(order); 
    } 
    return crit.list(); 
} 

...................................... ...................

Meine aktuelle 'Lösung' ist

@Formula("concat(first_name,' ',last_name)") 
private String name; 

@Override 
public String getFullName() { 
    return getFirstName() + " " + getLastName(); 
} 

Aber das ist überflüssig und nicht wirklich was ich will.

Am Ende möchte ich die neueste Hibernate-Version verwenden.

Antwort

0

Wenn die fullName keine Persistenz ist, dann sollten Sie die @Transient, aber die eine verwenden. Auch

, legte die @Formula("concat(first_name,' ',last_name)") auf der getFullName und entfernen Sie die getName -> dies war eigentlich falsch, da @Transient und @Formula nicht zusammen arbeiten sehr gut.

Wie im Kommentar gesagt, können Sie Ihre eigene Bestellung erstellen, um die Kriterien api hinzuzufügen.

+0

danke für deine antwort, tatsächlich fullName nur 'exists' als diese getter, so gibt es kein feld (das 'name' was bedeutet fullName wurde nur von mir hinzugefügt, weil es nicht ohne funktion) ich immer ein "konnte Eigenschaft nicht auflösen: fullName" error:/ Hat es irgendetwas damit zu tun, dass Name und Nachname in der Oberklasse sind? –

+0

Ich habe verstanden, wie FullName existiert und das ist genau der Punkt. Was Sie auch versuchen können, ist die @Transient (validieren Sie, dass es die richtige) in beide Richtungen und verlassen Sie wie im ersten Code, und erstellen Sie einfach eine neue Bestellung, überprüfen Sie https://StackOverflow.com/questions/31281162/How-to-Order-Ergebnis-von-Hibernate-basierend auf einer bestimmten Reihenfolge, die richtige Antwort zeigt, wie Sie Ihre eigene Bestellung erstellen. –

+0

es funktionierte (nach ein wenig Refactoring in meinem Projekt), vielen Dank! –

Verwandte Themen