2016-05-22 9 views
0

Ich möchte alle Pläne finden, wo Stadt Name Madrin (zum Beispiel) gleich. Aber ich bekomme immer einen Fehler.Wie findet man nach zusammengesetzten Objekteigenschaften?

org.springframework.web.util.NestedServletException: Anforderungsverarbeitung fehlgeschlagen; verschachtelte Ausnahme ist org.hibernate.QueryException: Eigenschaft: location.lName von: io.onek.entity.FuturePlan konnte nicht aufgelöst werden.

Hilf mir, es herauszufinden.

Zukunftsplan

@Entity 
public class FuturePlan { 

@Id 
@GeneratedValue(strategy=GenerationType.IDENTITY) 
private int fpId; 
private String about; 
@DateTimeFormat(pattern = "dd-mm-yyyy") 
@Temporal(TemporalType.DATE) 
private Date travelDate; 
@ManyToOne(fetch=FetchType.EAGER) 
private User user; 
@ManyToOne(fetch=FetchType.EAGER) 
private Location location; 

public FuturePlan() { 
    super(); 
} 

public FuturePlan(String about, Date travelDate) { 
    super(); 
    this.about = about; 
    this.travelDate = travelDate; 
} 

public FuturePlan(String about, Date travelDate, User user, Location location) { 
    this.about = about; 
    this.travelDate = travelDate; 
    this.user = user; 
    this.location = location; 
} 
..get/set/ 

Ort

@Entity 
public class Location { 

@Id 
@GeneratedValue(strategy=GenerationType.IDENTITY) 
private int lId; 
private String lName; 

public Location() { 
    super(); 
} 

public Location(int lId, String lName) { 
    super(); 
    this.lId = lId; 
    this.lName = lName; 
} 

Methode von meinem DAOImpl.

@Override 
public List<FuturePlan> findByLocation(String name) { 
    Session session = sessionFactory.openSession(); 
    Criteria cr = session.createCriteria(FuturePlan.class); 
    cr.add(Restrictions.eq("location.lName", name)); 
    List<FuturePlan> list = cr.list(); 
    session.close(); 
    return list; 
} 

Antwort

2

Sie müssen erstellen beitreten:

cr.createAlias("location", "l")); 
cr.add(Restrictions.eq("l.lName", name)); 

Aber ich würde wirklich vermeiden Kriterien für eine solche einfache statische Abfrage verwenden. Verwenden Sie JPQL:

select fp from FuturePlan fp where fp.location.lName = :name 
+0

'HQL' - weil er' Session' verwendet. Und dieses 'HQL' erzeugt eine' Kreuzverbindung'. –

Verwandte Themen