2017-02-01 5 views
0

У меня есть эти две сущности:Hibernate Criteria.createAlias ​​не объединение таблиц

@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 
} 

и

@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 
} 

Тогда в моей DAO у меня есть следующий метод:

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 создает следующий запрос:

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 

Я ожидал, что метод createAlias ​​создать присоединиться заявление в запросе, как 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 

Я использую эту версию спящего режима: Hibernate-core-3.6.0.Final

Я думаю, что я что-то здесь отсутствует.

ответ

0

Вы должны использовать метод цепочки в этом случае, который, вероятно, почему вы получаете эту проблему:

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

Пробовал это и получил тот же запрос, как и раньше – mornaner

+0

Что Hibernate версии вы используете? – Naros

+0

Hibernate-core-3.6.0.Final, я добавлю его к вопросу – mornaner