Hi, I would like to ask for help with creating query from criteria api, but
I want to simulate the conditional join clause from standard SQL, for
example

"from VOUCHER v left join USER_VOUCHER uv on ((v.VOUCHER_ID =
uv.VOUCHER_ID) and uv.USER_ID=2).."

More info:

I have two entities mapped to tables

@Entity
@Table(name = "voucher")
public class Voucher implements Serializable {
    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Basic(optional = false)
    @Column(name = "VOUCHER_ID")
    private Integer voucherId;
    @Column(name = "VOUCHER_NAME")
    private String voucherName;
    @OneToMany(mappedBy = "voucherId")
    private Collection<UserVoucher> userVoucherCollection;

    public Voucher() {
    }
//rest ommited
}

and

@Entity
@Table(name = "user_voucher")
public class UserVoucher implements Serializable {
    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Basic(optional = false)
    @Column(name = "USER_VOUCHER_ID")
    private Integer userVoucherId;
    @JoinColumn(name = "USER_ID", referencedColumnName = "USER_ID")
    @ManyToOne
    private User userId;
    @JoinColumn(name = "VOUCHER_ID", referencedColumnName = "VOUCHER_ID")
    @ManyToOne
    private Voucher voucherId;

    public UserVoucher() {
    }
//rest omitted
}

I want to select all the vouchers in db and additional info about the
relationship for specified userId. Even if there is no record in
user_voucher for userId=2, I want to get it from database. I can get it
with native sql with the condition mentioned at the start. But when using
the criteria api and inserting the id as predicate, it is no longer left
(outer) join, but an inner joins nad the records are not returned.


Thanks in advance for any help
Andrej

Please consider your environmental responsibility before printing this
e-mail.

Reply via email to