【问题标题】:@OneToOne unidirectional mapping in JPA2.0 -- getting SQL error on persistJPA2.0 中的@OneToOne 单向映射——持久化 SQL 错误
【发布时间】:2012-02-09 07:28:55
【问题描述】:

我不知道如何声明 OneToOne 单向关系。 TripDeparture 模型具有 Trip 模型的外键(这就是数据库的设置方式)。尝试添加一个将离开位置设置为空的旅行时,我收到以下错误。当我取出“departureLocation”声明时,一切正常。

11891 [btpool0-2] WARN org.hibernate.util.JDBCExceptionReporter - SQL Error: 1054, SQLState: 42S22
11891 [btpool0-2] ERROR org.hibernate.util.JDBCExceptionReporter - Unknown column 'tripId' in 'field list'

我的想法不多了...谁能帮忙??

谢谢!

家长:

@Entity
@Table(name = "TRIP")
public class Trip implements Serializable {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private int id;

    @OneToOne(fetch = FetchType.EAGER, cascade = CascadeType.REMOVE)
    @JoinColumn(name = "tripId")
    private TripDeparture departureLocation;

孩子:

@Entity
@Table(name = "DEPARTURE_LOCATION")
public class TripDeparture implements Serializable {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private int id;

    private int tripId;

【问题讨论】:

  • 你的设置有点奇怪。从 Java 的角度来看,父母知道孩子,但反过来却不知道(tripId 字段除外)。然而,在数据库级别上,孩子(离开)似乎管理着关联。这是故意的吗?
  • 是的,这就是目的(出于编组/解组的原因,但这是不同的对话)。
  • 另外,这限制了我坚持新旅行的方式(我必须将其保存为离开位置为空,然后将 TripDeparture 与已保存旅行中的 tripId 保持一致),但它的目的是方式——我不能在这里建立双向关系。
  • 我认为您缺少tripId 字段上的@Column 注释。
  • @GiorgosDimtsas - 在这种情况下不需要 Column 注释。

标签: java hibernate jpa-2.0


【解决方案1】:

这是我解决它的方法。我没有使用@JoinColumn,而是使用了@PrimaryKeyJoinColumn。我还删除了 DEPARTURE_LOCATION 中的“id”变量(和列),但这并不重要。

家长:

@Entity
@Table(name = "TRIP")
public class Trip implements Serializable {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private int id;

    @OneToOne(fetch = FetchType.EAGER, cascade = CascadeType.REMOVE)
    @PrimaryKeyJoinColumn
    private TripDeparture departureLocation;

孩子:

@Entity
@Table(name = "DEPARTURE_LOCATION")
public class TripDeparture implements Serializable {

    @Id
    private int tripId;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-05-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多