具有不同数据类型的JPA@MANYTONE

具有不同数据类型的JPA@MANYTONE,jpa,sqldatatypes,many-to-one,Jpa,Sqldatatypes,Many To One,我有两个旧的数据库表,需要与JPA一起使用 TOUR VEHICLE ----------------------- --------------------- Id NUMBER(10) VehicleNumber CHAR(3) VehicleNumber NUMBER(3) LicensePlate CHAR(10) 在我的JPA实体中,我希望您使用从巡更到车辆的@manytone关系 车辆实体:

我有两个旧的数据库表,需要与JPA一起使用

TOUR                        VEHICLE
-----------------------     ---------------------
Id NUMBER(10)               VehicleNumber CHAR(3)
VehicleNumber NUMBER(3)     LicensePlate CHAR(10)
在我的JPA实体中,我希望您使用从巡更到车辆的@manytone关系

车辆实体:

public class Vehicle {
  @Id
  @Column(length=3)
  private String VehicleNumber;
...
旅游实体:

public class Tour {
  @Id
  @Column(precision=3)
  private BigDecimal Id;

  @ManyToOne(fetch=FetchType.EAGER)
  @JoinColumn(name="VehicleNumber", referencedColumn="VehicleNumber")
  private Vehicle vehicle;
...
但这当然不起作用,因为一个车号是translatet到String,另一个是translatet到BigDecimalprecision=3

那我该怎么做才能加入他们呢?应忽略非数值

谢谢您的建议。

巡更表中的车辆编号是一个数字,而另一个是字符。 首先,您需要更好地匹配类型,而不是试图破坏标准

然后为@Id输入列名,而不是@Columnprecision=3。因此,它应该是:

public class Tour {
  @Id
  @Column(name = "Id")
  private BigDecimal id;
  ...
}
对另一张桌子也这样做。 哦,顺便说一下,我建议您使用Long作为主键,而不是BigDecimal,除非您必须这样做。
但是对于实体,您可以使用Long

什么意思“不工作?”您使用的是什么JPA版本?我使用的是IBM WebSphere Application Server 8.5附带的OpenJPA 2.0,我正在尝试访问IBM I 7.1上的IBM DB2/400。有些表已经使用了20年或更久,如果不接触各种旧的RPG程序,我无法对它们进行任何更改。错误:org.apache.openjpa.persistence.ArgumentException:model.Tour.vehicle声明了一个与预期类型varchar不兼容的列。