有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

具有列表和超级实体类的java hibernate集合映射

在这里,我再次在我的自我学习冬眠和个人实验项目,以获得更多的了解。 以下是对我的环境的描述: 我有一个超级模型实体,我的所有模型都继承自该实体。它只有id属性 我使用hibernate网站上的genericDAO模式。 现在我的问题是,我使用list而不是set进行一对多映射(此处无需避免重复),当我在list index或list index属性中引用超级实体id时,出现以下错误: 组织。冬眠UnuniqueObjectException:具有相同标识符值的不同对象已与会话关联 这是超级实体接口

public interface Model extends Serializable {
public Long getId();
public void setId(Long id);
}

//here is its implementation.they are not in the same physical file
public abstract class ModelImpl implements Model {
private Long id;
public Long getId() {
    return id;
}
public void setId(Long id) {
    this.id = id;
}

}

这是它的映射文件

<class abstract="true" name="ModelImpl">
<!--i removed doctype and stuffs-->
<id name="id">
  <generator class="assigned"/>
</id>
</class>

这是pojo界面上的这是我的父母

public interface Message extends Model {
Date getDateSent();
String getGlobalStatus(); 

} //它的实现在这里,但在不同的物理文件上 公共类MessageImpl扩展ModelImpl实现消息{ 私有字符串globalStatus; 私有列表响应=新建ArrayList(); 已发送的私人日期; //二传手和接球手。。。。 }

其映射文件如下所示:

<union-subclass extends="ModelImpl" name="MessageImpl">
<property name="globalStatus"/>
<property name="dateSent" type="timestamp"/>

</设置>--&燃气轮机;

我评论了这一集,因为它有一个铸造错误,这使我意识到我的错误 因此,作为父级的响应类在这里:

public interface Response extends Model {
String getGatewayMessageId();
Message getMessageId();
}
//its implementation but in different physical file
public class ResponseImpl extends ModelImpl implements Response{

private static final long serialVersionUID = 1L;

private Message messageId;
private String gatewayMessageId;
//setters and getters..
}

基本上就是这样。现在,在我的测试中,当我试图将消息与其子消息一起保存时,它会抛出以下内容:

org.hibernate.NonUniqueObjectException: a different object with the same identifier value was already associated with the session

我可以做所有的持久方法,除了我刚才提到的那个。 我在这里有点迷茫,因为他们都继承了模型id,那么我做错了什么? 谢谢你的阅读。我不太明白这里的问题


共 (2) 个答案

  1. # 1 楼答案

    听起来你想用一个已经存在的ID保存一个实体。您意识到,当您使用联合子类方法时,您可能拥有的所有子类共享相同的ID空间,是吗

    顺便问一下,你有没有理由手动分配ID,或者生成的ID会有帮助

  2. # 2 楼答案

    解决它。我有一个管理器(创建POJO和DAO),为每个新创建的POJO注入新的Id。在测试过程中,我手动添加id。谢谢你的帮助