gpt4 book ai didi

mysql - 简单的 hibernate 不起作用,但级联查询可以

转载 作者:行者123 更新时间:2023-11-29 21:12:20 24 4
gpt4 key购买 nike

我有一个“transactionitems”表,其中包含父“transactions”表的 FK。我在查询解析事务行的“transactionitems”表时没有问题。但是,当我直接查询事务表时,我没有得到任何结果。我在控制台中看不到任何错误或异常。

像下面这样的方法调用会产生正确的结果

Session s = DataAccess.ObtainSession();
Criteria cr = s.createCriteria(TransactionItem.class);
cr.createAlias("transaction", "transaction");
cr.add(Restrictions.eq("transaction.id", txid));
List<TransactionItem> results = cr.list();

但是更简单的方法调用返回空列表

 Session s = DataAccess.ObtainSession();
Criteria cr = s.createCriteria(Transaction.class);
List<Transaction> list = cr.list();

下面的 Hibernate 映射文件和类

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="com.beraben.drycleanpos3.entities.Transaction" table="transactions">
<id column="id" name="id">
<generator class="increment"/>
</id>
<property name="customerName" column="customer_name"/>
<property name="customerContact" column="customer_contact"/>
<property name="createdDate" type="date" column="created_datetime"/>
<property name="dueDate" type="date" column="due_datetime"/>
<property name="readyDate" type="date" column="ready_datetime"/>
<property name="jobClosedDate" type="date" column="job_closed_datetime"/>
<property name="notes" />
</class>
</hibernate-mapping>

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="com.beraben.drycleanpos3.entities.TransactionItem" table="transaction_items">

<id column="id" name="id">
<generator class="increment"/>
</id>
<many-to-one class="com.beraben.drycleanpos3.entities.Transaction" column="transaction_id" name="transaction" cascade="merge" not-null="true" />
<property name="garmentTypeName" column="garment_type_name"/>
<property name="jobTypeName" column="job_type_name"/>
<property name="price"/>
<property name="notes"/>

</class>
</hibernate-mapping>



public class TransactionItem {
private int id;
private Transaction transaction;
private String garmentTypeName;
private String jobTypeName;
private int price;
private String notes;


public int getId() {
return id;
}

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

public Transaction getTransaction() {
return transaction;
}

public void setTransaction(Transaction transaction) {
this.transaction = transaction;
}

public String getGarmentTypeName() {
return garmentTypeName;
}

public void setGarmentTypeName(String garmentTypeName) {
this.garmentTypeName = garmentTypeName;
}

public String getJobTypeName() {
return jobTypeName;
}

public void setJobTypeName(String jobTypeName) {
this.jobTypeName = jobTypeName;
}

public int getPrice() {
return price;
}

public void setPrice(int price) {
this.price = price;
}

public String getNotes() {
return notes;
}

public void setNotes(String notes) {
this.notes = notes;
}



}



public class Transaction {
private int id;
private String customerName;
private String customerContact;

@JsonSerialize(using = CustomDateSerializer.class)
private Date createdDate;

@JsonSerialize(using = CustomDateSerializer.class)
private Date dueDate;

@JsonSerialize(using = CustomDateSerializer.class)
private Date readyDate;

@JsonSerialize(using = CustomDateSerializer.class)
private Date jobClosedDate;

private String notes;

public int getId() {
return id;
}

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

public String getCustomerName() {
return customerName;
}

public void setCustomerName(String customerName) {
this.customerName = customerName;
}

public String getCustomerContact() {
return customerContact;
}

public void setCustomerContact(String customerContact) {
this.customerContact = customerContact;
}

@JsonSerialize(using = CustomDateSerializer.class)
public Date getCreatedDate() {
return createdDate;
}

@JsonSerialize(using = CustomDateSerializer.class)
public void setCreatedDate(Date createdDate) {
this.createdDate = createdDate;
}

@JsonSerialize(using = CustomDateSerializer.class)
public Date getDueDate() {
return dueDate;
}

@JsonSerialize(using = CustomDateSerializer.class)
public void setDueDate(Date dueDate) {
this.dueDate = dueDate;
}

@JsonSerialize(using = CustomDateSerializer.class)
public Date getReadyDate() {
return readyDate;
}

@JsonSerialize(using = CustomDateSerializer.class)
public void setReadyDate(Date readyDate) {
this.readyDate = readyDate;
}

@JsonSerialize(using = CustomDateSerializer.class)
public Date getJobClosedDate() {
return jobClosedDate;
}

@JsonSerialize(using = CustomDateSerializer.class)
public void setJobClosedDate(Date jobClosedDate) {
this.jobClosedDate = jobClosedDate;
}

public String getNotes() {
return notes;
}

public void setNotes(String notes) {
this.notes = notes;
}

@Override
public String toString() {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ");
return "Transaction{" + "id=" + id + ", customerName=" + customerName + ", customerContact=" + customerContact + ", createdDate=" + sdf.format(createdDate) + ", dueDate=" + sdf.format(dueDate) + ", readyDate=" + readyDate + ", jobClosedDate=" + jobClosedDate + ", notes=" + notes + '}';
}

最佳答案

实际上这些问题应该作为对您问题的评论,但不幸的是我还没有权限。

您的映射显示您已在 TransactionItem 中映射 Transaction,但没有从 Transaction 到 TransactionItem 的链接。在这种情况下,您能更具体地介绍一下结果吗?

  1. 在查询 Transaction 时,您是否完全没有得到任何结果,或者您是否说结果中不包含 TransactionItem 数据?

  2. 当您对TransactionItem执行查询时,您是否看到Transaction的数据?

此外,检查 Hibernate 用于获取数据的最终查询的日志。如果您尝试直接在 SQL 中执行它,它可能会告诉您为什么它不起作用。

关于mysql - 简单的 hibernate 不起作用,但级联查询可以,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36255975/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com