我正在尝试理解两个实体之间的OneToOne映射。
我无法理解如何在mappedBy
中指定OneToOne
属性以使其成为双向关系。
@Embeddable
public class UserID implements Serializable {
private static final long serialVersionUID = 1L;
private int ssnID;
private int uniqueNum;
// getters and setters..
}
@Embeddable
public class VehicleID implements Serializable {
private int vehicleID;
private int regNum;
// getters and setters
}
@Entity
public class Vehicle {
@EmbeddedId
private VehicleID vehicleID;
private String description;
// getters and setters..
}
@Entity
public class UserInfo {
private String full_name;
@EmbeddedId
UserID userID;
@OneToOne(cascade=CascadeType.ALL)
@JoinColumns({@JoinColumn(name="vehicle_ID") , @JoinColumn(name="reg_Num")}) // Composite primary key in Vehicle
Vehicle veh;
// getters, setters and other code
}
UserInfo
是拥有方实体,与OneToOne
实体(具有复合VehicleID作为主键)具有Vehicle
关系。
在UserInfo
实体中,我们指定OneToOne
关系(和注释):
@OneToOne(cascade=CascadeType.ALL)
@JoinColumns({@JoinColumn(name="vehicle_ID") , @JoinColumn(name="reg_Num")})
Vehicle veh;
从上面可以看出,在UserInfo
表中,我们在Vehicle
表上有一个复合外键,JoinColumn
的名称指定为vehicle_ID
和{ {1}}。
现在,当我想要使它成为双向关系时,我们需要使用reg_Num
属性,这就是我无法理解要引用的属性的地方。
mappedBy
我保留了#34; UserID"因为它是"复合" UserInfo的主键,但它抛出异常:
线程中的异常" main" org.hibernate.AnnotationException:未知 mappedBy in:com.example.entity.Vehicle.userInfo,references properties unknown:com.example.entity.UserInfo.UserID
我无法理解这里提到的财产;我在教程中看到的例子,大多数都有一个PK,FK;但就我而言,它是复合PK,FK。
任何人都可以帮我理解这个吗?
答案 0 :(得分:1)
应该是这样的:
@OneToOne(mappedBy="veh")
private UserInfo userInfo;
mappedBy
元素标识关系的反面。这里你有Vehicle和UserInfo之间的关系,所以要识别关系的反面应该由其他边属性使用它。这里veh
。
有关详细信息,请参阅this