在没有数据库的java中管理简单的一对多实体关系

在没有数据库的java中管理简单的一对多实体关系,java,one-to-many,entity-relationship,Java,One To Many,Entity Relationship,我正试图找到一种方法,以一种轻量级的方式管理两个拥有一对一关系但永远不会持久的模特 我的搜索让我找到了javax.persistence,它似乎可以做我想做的事情,但我似乎无法让它工作 由于考试总是比演讲重要得多,以下是我想要实现的目标: public void test_relationship(){ 父母p=新父母(“玛丽”); 儿童c1=新生儿童(“雨果”); 子女c2=新子女(“查理”); 儿童c3=新生儿童(“弗朗西娜”); p、 addChild(c1) Assert.assertE

我正试图找到一种方法,以一种轻量级的方式管理两个拥有一对一关系但永远不会持久的模特

我的搜索让我找到了
javax.persistence
,它似乎可以做我想做的事情,但我似乎无法让它工作

由于考试总是比演讲重要得多,以下是我想要实现的目标:

public void test_relationship(){
父母p=新父母(“玛丽”);
儿童c1=新生儿童(“雨果”);
子女c2=新子女(“查理”);
儿童c3=新生儿童(“弗朗西娜”);
p、 addChild(c1)
Assert.assertEquals(p,c1.getParent());
p、 removeChild(c1)
Assert.assertNull(c1.getParent());
p、 添加子项(c1、c2)
Assert.assertEquals(p,c1.getParent());
Assert.assertEquals(p,c2.getParent());
c1.移除父对象();
Assert.assertFalse(p.hasChild(c1));
c1.setParent(p);
Assert.assertTrue(p.hasChild(c1));
}
所有这些都没有数据库。它的唯一目的是方便从一个对象访问另一个对象。这些对象将根据作为HTTP请求有效负载(JSON格式)接收的数据构建,并且需要作为响应的一部分序列化回JSON

现在,这是我所做的

@实体
公共类父级实现可序列化{
private Collection children=new HashSet();
@身份证
私有字符串id;
@OneToMany(mappedBy=“parent”,fetch=FetchType.EAGER)
公共集合getChildren(){
返回儿童;
}
公共无效添加子对象(子对象){
this.children.add(child);
}
公共无效删除child(child){
这个。儿童。移除(儿童);
}
公共布尔hasChild(child){
this.children.contains(child);
}
}
@实体
公共类子级实现可序列化{
私人家长;
@身份证
私有字符串id;
@许多酮
公共父getParent(){
返回父母;
}
公共void setParent(父级){
this.parent=parent;
}
public void removeParent(){
this.parent=null;
}
}
编辑:
我希望关系行为来自
javax.persistence
。可能通过
实体管理器
?我真的不知道这些是怎么工作的。我知道我可以自己对这种行为进行编码,但我希望避免对我的每个实体的每个关系进行编码,并尽可能使用最枯燥的代码。

你是其中的一部分。缺少的一点是,当您创建/更新/删除父子关系的一侧时,您需要在另一侧执行相同的操作

比如说

public void setParent(Parent parent) {
    if (this.parent != null) {
         this.parent.removeChild(this);
    }
    this.parent = parent;
    parent.addChild(this);
}

(并将
childs
更改为
childs
,否则语法怪兽会吃掉你!)

如果你永远都不想将它们持久化到关系数据库中,为什么要把它们当作关系数据库实体来对待呢?为什么不使用常规对象图?@MikkelLøkke我不确定什么是对象图,但我想要的是大多数ORM在管理关系时提供的舒适感。e、 g.如果我将一个子项添加到父项,则子项中引用父项,反之亦然。如果您有另一个解决方案,它不涉及对每个关系进行编码,我将采用它:)对象图基本上就是您已经拥有的。子项的哈希集,这是OneToMany关系的对象版本。问题是你也需要从另一个方向去做。正如Stephens answer指出的那样,这很快就演变成了簿记的地狱,至少如果你处理的是一个复杂的数据集。根据我的经验,最简单的方法就是使用番石榴的BiMap系列。这需要对你已经拥有的东西进行一些重新设计,但与IMHO合作要容易得多。我有点希望这是由
@OneToMany
魔术完成的。这是我使用
javax.persistence
:不需要自己管理每个关系的唯一原因。我不知道有任何javax.persistence实现不进行持久化。。。