[英]JpaRepository findOne(id) returns null
这是我在这里的第一篇文章,我在这里搜索了很长时间,但没有发现类似的问题。
当我对我的一个类使用 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()
经过所有调查,我找到了一个对我有用的有趣答案。 我认为这完全是关于在 Db 上定义列类型。 就我而言,我已将变量( rid
作为列)定义为varchar2(18)
,即RID CHAR(18 BYTE)
。
Java部分:
if (dhFlightRepo.findOneFlight(dhFlight.getRid())== null) {
dhFlightRepo.save(dhFlight);
}
如果您用作findOne()
参数的值小于列上的设置值(我的情况为 18),则 jpa 不接受值并返回 null。您必须将列类型更改为 varchar2(18)可以根据findOne()
上的给定值进行更改并完美运行。
我希望这对你们所有人都有效。如果有人知道更详细的原因,我恳请提供更多细节。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.