JpaRepository findOne(id)返回null

时间:2015-04-13 08:55:16

标签: java spring hibernate spring-data-jpa

这是我在这里发表的第一篇文章,我在这里搜索了很长时间,但我没有发现类似的问题。

当我为我的一个类使用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()

1 个答案:

答案 0 :(得分:0)

经过所有调查,我找到了一个对我有用的有趣答案。我认为这完全是关于在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()上的给定值进行更改并且工作正常。

我希望这适用于所有人。我请求提供更多细节如果有人知道更详细的原因。