java - 在 hibernate 中如何编写查询以使用复合键检索数据?

标签 java hibernate

这里我有一个名为 receipt 的表,它的主键是与其他类 Receipt_compoundKey 引用的复合键,有两个名为 voucher_idcompany_id 的变量>,

我如何从条件如 company_id=1;

的收据中检索数据

收据:

@Entity

@Table(name = AMAM_Constants.tb_name.RECEIPT_FROM, catalog = AMAM_Constants.db_name)
public class Receipt implements Serializable {

@Id
private Receipt_CompoundKey id;
@OneToOne
@JoinColumn(name = "FROM_LEDGER")
private Ledger fromLedger;
@Column(name = "VOU_DATE")
private Date voucher_Date;
@Column(name = "TOTAL_AMOUNT")
private double total_amount;
@Column(name = "ACTIVE")
private char active;
@ManyToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY)
@JoinTable(name = AMAM_Constants.tb_name.RECEIPT_FROM_LINK_TO, joinColumns = {
    @JoinColumn(name = "COMPANY_ID"),
    @JoinColumn(name = "VOUCHER_ID")
}, inverseJoinColumns = {
    @JoinColumn(name = "RECP_TO")})
private List<Receipt_To> recptToList = new ArrayList<Receipt_To>();
@ManyToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
@JoinTable(name = AMAM_Constants.tb_name.RECEIPT_FROM_LINK_ADJMTS, joinColumns = {
    @JoinColumn(name = "COMPANY_ID"),
    @JoinColumn(name = "VOUCHER_ID")
}, inverseJoinColumns = {
    @JoinColumn(name = "RECPT_ADJS")})
private List<Receipt_Adj> recptAdjments = new ArrayList<Receipt_Adj>();

public List<Receipt_Adj> getRecptAdjments() {
    return recptAdjments;
}

public void setRecptAdjments(List<Receipt_Adj> recptAdjments) {
    this.recptAdjments = recptAdjments;
}

public List<Receipt_To> getRecptToList() {
    return recptToList;
}

public void setRecptToList(List<Receipt_To> recptToList) {
    this.recptToList = recptToList;
}

public char getActive() {
    return active;
}

public void setActive(char active) {
    this.active = active;
}

public double getTotal_amount() {
    return total_amount;
}

public void setTotal_amount(double total_amount) {
    this.total_amount = total_amount;
}

public Ledger getFromLedger() {
    return fromLedger;
}

public void setFromLedger(Ledger fromLedger) {
    this.fromLedger = fromLedger;
}

public Receipt_CompoundKey getId() {
    return id;
}

public void setId(Receipt_CompoundKey id) {
    this.id = id;
}

public Date getVoucher_Date() {
    return voucher_Date;
}

public void setVoucher_Date(Date voucher_Date) {
    this.voucher_Date = voucher_Date;
}

Receipt_CompoundKey :

@Embeddable
public class Receipt_CompoundKey implements Serializable {

@Column(name = "VOUCHER_ID")
private long voucher_Id;
@Column(name = "COMPANY_ID")
private long company_Id;

public Receipt_CompoundKey() {
}

public Receipt_CompoundKey(long voucher_Id) {
    this.voucher_Id = voucher_Id;
}

public Receipt_CompoundKey(long voucher_Id, long company_Id) {
    this.company_Id = company_Id;
    this.voucher_Id = voucher_Id;
}

public long getCompany_Id() {
    return company_Id;
}

public void setCompany_Id(long company_Id) {
    this.company_Id = company_Id;
}

public long getVoucher_Id() {
    return voucher_Id;
}

public void setVoucher_Id(long voucher_Id) {
    this.voucher_Id = voucher_Id;
}

查询:

String query = "from Receipt where active='Y' and  id=:id ";
begin();
objList = getSession().createQuery(query).setLong("id", key.getCompany_Id()).setLong("id", key.getVoucher_Id()).list();
commit();

最佳答案

您可以像使用单列 ID 一样执行此操作:

getSession().createQuery(query).setParameter("id", key);

您还可以查询键的各个值,但这里没有必要:

String query = "select r from Receipt r where r.active = 'Y'"
               + " and id.company_Id = :companyId"
               + " and id.voucher_Id = :voucherId";
objList = getSession().createQuery(query)
                      .setLong("companyId", key.getCompany_Id()) 
                      .setLong("voucherId", key.getVoucher_Id())
                      .list();

请遵守 Java 命名约定:voucherId 而不是 voucher_Id、ReceiptCompoundKey 而不是 Receipt_CompoundKey 等。

关于java - 在 hibernate 中如何编写查询以使用复合键检索数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8352976/

相关文章:

sql - GORM - 动态查询 - 分离标准?

java - 使用 hibernate 条件选择值对象

java - 如何修复我遇到的 Base64 错误?

java - 当我在代码中设置事务隔离级别时,它是在代码中还是在 DBMS 中强制执行?

hibernate - JBoss 作用域类加载

java - 如何使用hql在MySql中设置日期时间字段

java - 如何将我的 JSON 属性之一转换为数组?

java - Httpclient库登录

java - 简单计算在多线程中比在单线程中花费更长的时间

javascript - 保存对象列表返回 Cannot deserialize 错误