如何使用 Hibernate 进行查询并在对象字段上应用限制

How make a query with Hibernate and applying Restrincions on a field that is an Object

这是实体Utente;如您所见,有一个字段 autenticazione 是另一个实体,称为 Autenticazione

@Entity
@Table(name = "utente")
@Component
public class Utente implements Serializable{
    ...
    @OneToOne(mappedBy = "utente", cascade = CascadeType.ALL)
    @Valid
    private Autenticazione autenticazione;  
    ...
}

这是实体 Autenticazione

@Component
@Entity
@Table(name = "autenticazione")
public class Autenticazione implements Serializable{
    ...
    @OneToOne(targetEntity=Utente.class)    
    @JoinColumn(name="utente", referencedColumnName="id") 
    private Utente utente;      

    @Column(name = "username")
    @Size(min = 3, max = 20)
    @Pattern(regexp="^[A-Za-z0-9.-_]*$")
    private String username;
    ...
}

我必须进行查询以从数据库中获取对象 Utente,并按 username[=33 字段的值进行搜索=] 对象 Autenticazione,即实体 Utente.

的字段

我应该这样做:

Criteria criteria = getCurrentSessionFactory().createCriteria(Utente.class);
criteria.add(
             Restrictions.eq("autenticazione.username",            
             utenteForSearch.getAutenticazione().getUsername())
             );

是否可以使用 Hibernate 并将作为实体本身的实体的字段用作 "where"?

谢谢

评论者 (@Dragan Bozanovic) 是正确的,你想要这个:

Criteria criteria = getCurrentSessionFactory().createCriteria(Utente.class);
crit.createAlias("autenticazione", "autenticazione");
criteria.add(
             Restrictions.eq("autenticazione.username",            
             utenteForSearch.getAutenticazione().getUsername())
             );