【问题标题】:hibernate: insert instance with external "id class"休眠:插入具有外部“id 类”的实例
【发布时间】: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


【解决方案1】:

这很简单。您需要先创建一个新的RideId,将其分配给一个新的Ride,然后使用Ride 调用saveOrUpdate

RideId id = new RideId(1, 2, "someuser");
Ride ride = new Ride(id, ...);
session.saveOrUpdate(ride);

【讨论】:

  • 这是正确的答案,我刚刚解决了它,并完全按照您的做法进行操作。不过谢谢!
猜你喜欢
  • 2015-10-16
  • 2012-08-21
  • 2018-03-18
  • 1970-01-01
  • 2011-02-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多