2017-02-01 4 views
0

Ich habe diese zwei Einheiten:Hibernate Criteria.createAlias ​​nicht Verbindende Tabellen

@Entity 
@Table(name = "BA_USER", schema = "MYSCHEMA") 
@XmlType(namespace = BusinessOperations.NAMESPACE) 
@JsonIgnoreProperties(ignoreUnknown = true) 
public class UserWeb implements Serializable, UserDetails, SecurityUserInfo, Auditable { 

    @Id 
    @GeneratedValue(strategy = GenerationType.AUTO, generator = "userGenerator") 
    @SequenceGenerator(name="userGenerator", sequenceName="SEQ_USER") 
    @Column(name = "USERID", unique = true, nullable = false, precision = 22, scale = 0) 
    private long userid; 

    @ManyToOne(targetEntity = Country.class, fetch = FetchType.LAZY) 
    @JoinColumn(name = "COUNTRYID") 
    private Country country; 

    @ManyToOne(targetEntity = Menu.class, fetch = FetchType.LAZY) 
    @JoinColumn(name = "MENUID") 
    private Menu menu; 

    //Getters and Setters 
} 

und

@Entity 
@Table(name = "BA_PREMIUMUSER", schema = "MYSCHEMA") 
public class PremiumUser implements java.io.Serializable { 

    @Id 
    @OneToOne(targetEntity = UserWeb.class, fetch = FetchType.LAZY) 
    @JoinColumn(name = "USERID") 
    private UserWeb userWeb; 

    @ManyToOne(targetEntity = Customer.class, fetch = FetchType.LAZY) 
    private Customer customer; 

    //Getters and Setters 
} 

, Da ist in meinem DAO habe ich die folgende Methode:

public List<PremiumUser> findAllUsers(Long userid, Long customerId, Menu menu) { 

    Criteria criteria = getSession().createCriteria(PremiumUser.class); 

    criteria.add(Restrictions.eq("clienteProsegur", customerId)); 
    criteria.createAlias("userWeb", "userweb", CriteriaSpecification.INNER_JOIN); 
    criteria.add(Restrictions.eq("userweb.menu", menu)); 

    return criteria.list(); 
} 

Hibernate erstellt die folgende Abfrage:

select this_.USERID as USERID52_0_, this_.CUSTOMER as CUSTOMER2_52_0_ 
from MYSCHEMA.BA_PREMIUMUSER this_ 
where userweb1_.MENUID=2 and this_.CUSTOMERID=3 

ich erwartet, dass die Methode Create eine Join-Anweisung in der Abfrage zu erstellen, wie this_

select this_.USERID as USERID52_0_, this_.CUSTOMER as CUSTOMER2_52_0_ 
from MYSCHEMA.BA_PREMIUMUSER this_ 
inner join MYSCHEMA.BA_USER userweb1_ on this_.USERID = userweb1.USERID 
where userweb1_.MENUID=2 and this_.CUSTOMERID=3 

ich diese Version von Hibernate bin mit: Hibernate-core-3.6.0.Final

Ich glaube, ich hier etwas fehlt bin.

Antwort

0

Sie sollten Verfahren Verkettungs in diesem Fall verwendet werden, was wahrscheinlich ist, warum Sie dieses Problem, wenn es darum:

public List<PremiumUser> findAllUsers(Long userid, Long customerId, Menu menu) 
    return getSession().createCriteria(PremiumUser.class) 
     .add(Restrictions.eq("clienteProsegur", customerId)) 
     .createAlias("userWeb", "userweb", CriteriaSpecification.INNER_JOIN) 
     .add(Restrictions.eq("userweb.menu", menu)) 
     .list(); 
} 
+0

versucht, diese und bekam die gleiche Abfrage wie vor – mornaner

+0

Was Hibernate Version verwenden Sie? – Naros

+0

Hibernate-core-3.6.0.Final, ich werde es zur Frage hinzufügen – mornaner

Verwandte Themen