【发布时间】:2013-04-09 08:32:29
【问题描述】:
我在 JBOSS 服务器上使用 Hibernate + HSQL,我需要 saveOrUpdate() 一个对象,它的 ID 由另一个类表示:
public class RideId implements java.io.Serializable {
private int beginPop;
private int endPop;
private String requestUser;
public RideId() {
}
public RideId(int beginPop, int endPop, String requestUser) {
this.beginPop = beginPop;
this.endPop = endPop;
this.requestUser = requestUser;
}
...
所以,“RideID”是实体“Ride”的 ID
public class Ride implements java.io.Serializable {
private RideId id;
private User userByRequestUser;
private User userByAcceptUser;
private Pop pop;
private Boolean rideStatus;
public Ride() {
}
public Ride(RideId id, User userByRequestUser, Pop pop) {
this.id = id;
this.userByRequestUser = userByRequestUser;
this.pop = pop;
}
public Ride(RideId id, User userByRequestUser, User userByAcceptUser,
Pop pop, Boolean rideStatus) {
this.id = id;
this.userByRequestUser = userByRequestUser;
this.userByAcceptUser = userByAcceptUser;
this.pop = pop;
this.rideStatus = rideStatus;
}
...
我怎样才能 saveOrUpdate() 类型为 Ride 的新对象?
谢谢大家,对不起我的英语!
【问题讨论】:
-
通过使用 saveOrUpdate 方法,你的错误在哪里?
-
这是一个重复的问题吗?我猜你是在追求像复合ID这样的东西。 stackoverflow.com/questions/2301259/hibernate-composite-key
-
是的,是一个复合 ID,但是类是正确的,来自 hibernate 已经进行的反向工程,我无法保存 Ride 类型的新对象,因为我不知道如何实例化他的ID! @Fenil Shah:我可以使用 saveOrUpdate 方法,但是在具有唯一 id(id 仅由 1 个列组成)的实体上,具有复合 id 我不知道,例如,在哪个对象上调用 saveOrUpdate跨度>
-
首先,您需要确保配置文件中的 Ride 和 RideId 类之间存在一对一的映射。现在您只需将 Ride 类对象传递给您的 saveOrUpdate 方法,因为 Ride 类中有 RideId 对象,休眠将从 RideId 对象中获取您的复合键数据并保存。
-
@FenilShah 否。请查看休眠参考:docs.jboss.org/hibernate/orm/4.1/manual/en-US/html/…。稍微滚动到“复合标识符”部分。复合 id 不是
@Entity,也不是<class>
标签: java hibernate insert save identifier