这里我有一个名为 receipt 的表,它的主键是与其他类 Receipt_compoundKey
引用的复合键,有两个名为 voucher_id
和 company_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/