【问题标题】:JPA @ManyToOne with different datatypes具有不同数据类型的 JPA @ManyToOne
【发布时间】:2014-07-21 14:46:44
【问题描述】:

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

TOUR                        VEHICLE
-----------------------     ---------------------
Id NUMBER(10)               VehicleNumber CHAR(3)
VehicleNumber NUMBER(3)     LicensePlate CHAR(10)

在我的 JPA 实体中,我希望你使用从 TOUR 到 VEHICLE 的 @ManyToOne 关系。

车辆实体:

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;
...

但这当然行不通,因为一个车号被转换为字符串,另一个被转换为 BigDecimal(precision=3)。

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

感谢您的建议。

【问题讨论】:

  • 你是什么意思,'不起作用?'
  • 您使用的是哪个 JPA 版本?
  • 我正在使用 IBM WebSphere Application Server 8.5 附带的 OpenJPA 2.0,我正在尝试访问 IBM i 7.1 上的 IBM DB2/400。有些表已经超过 20 年了,如果不接触各种旧的 RPG 程序,我就无法更改它们。
  • 错误:<1564471>

标签: jpa sqldatatypes many-to-one


【解决方案1】:

VehicleNumberTOUR 表中是一个数字,而在另一个表中是CHAR。 首先,您需要匹配类型(最好不要尝试破解标准)。

那么对于@Id,输入列名而不是@Column(precision=3)。所以应该是:

public class Tour {
  @Id
  @Column(name = "Id")
  private BigDecimal id;
  ...
}

对另一张桌子做同样的事情。 哦,顺便说一句,我建议你使用Long 作为主键而不是BigDecimal,除非你必须这样做。 但是对于实体,您可以使用Long

【讨论】:

    猜你喜欢
    • 2012-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-13
    相关资源
    最近更新 更多