【发布时间】:2015-04-13 08:55:15
【问题描述】:
这是我在这里的第一篇文章,我在这里搜索了很长时间,但我没有发现一个看起来相似的问题。
当我对我的一个类使用 JpaRepository 函数 findOne(id) 时,它返回 null。好像没有找到该 id 的行。 当然存在这个id的数据库行。
我的类映射也似乎正确。
我不明白,因为我已经将 findOne() 用于其他类,而且我从来没有遇到任何问题。
谁能告诉我这个问题的根源是什么?那就太好了!
这是我的 DAO:
@Transactional
public interface OrderDetailDAO extends JpaRepository<OrderDetail, Integer>
{
}
这是我的模特:
@Entity
@Table(name = "order_detail", schema = "", catalog = AppConfig.databaseSchema)
public class OrderDetail implements Serializable {
private int idOrderDetail;
private Order order;
private Preorder preorder;
private UnitType unitType;
private Sale sale;
private DeliveryStatusType deliveryStatusType;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id_Order_Detail")
public int getIdOrderDetail() {
return idOrderDetail;
}
public void setIdOrderDetail(int idOrderDetail) {
this.idOrderDetail = idOrderDetail;
}
@ManyToOne
@JoinColumn(name = "id_Order", referencedColumnName = "id_Order", nullable = false)
public Order getOrder() {
return order;
}
public void setOrder(Order order) {
this.order = order;
}
@ManyToOne
@JoinColumn(name = "id_Preorder", referencedColumnName = "id_Preorder", nullable = false)
public Preorder getPreorder() {
return preorder;
}
public void setPreorder(Preorder preorder) {
this.preorder = preorder;
}
@ManyToOne
@JoinColumn(name = "id_Unit_Type", referencedColumnName = "id_Unit_Type")
public UnitType getUnitType() {
return unitType;
}
public void setUnitType(UnitType unitType) {
this.unitType = unitType;
}
@ManyToOne
@JoinColumn(name = "id_Sale", referencedColumnName = "id_Sale")
public Sale getSale() {
return sale;
}
public void setSale(Sale sale) {
this.sale = sale;
}
@ManyToOne
@JoinColumn(name = "id_Delivery_Status_Type", referencedColumnName = "id_Delivery_Status_Type")
public DeliveryStatusType getDeliveryStatusType() {
return deliveryStatusType;
}
public void setDeliveryStatusType(DeliveryStatusType deliveryStatusType) {
this.deliveryStatusType = deliveryStatusType;
}
}
当我手动编写请求时,像这样:
@Query("SELECT o FROM OrderDetail o WHERE o.idOrderDetail = :idOrderDetail")
public OrderDetail findOneCustom(@Param("idOrderDetail") Integer idOrderDetail);
这行得通,但这很难看,所以我更喜欢使用 JpaRepository 原生函数 findOne()
【问题讨论】:
-
我们需要模式细节。能否提供部分代码?
-
哇,你回答得很快,谢谢!我编辑了我的帖子
-
我可能错了,但
idOrderDetail(+ 访问器)不应该是Integer而不是int? -
感谢您的回答 sp00m。事实上,我们可以使用 Integer 进行休眠映射,但在我的所有其他类中,我也使用 int 和 findOne() 工作。
-
首先将 int 更改为 Integer,其次,在日志中检查 hibernate 在调用
findOne方法时生成的查询。这可能是开始的好地方
标签: java spring hibernate spring-data-jpa