繁体   English   中英

JpaRepository findOne(id) 返回 null

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM