【发布时间】: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 注释。