【发布时间】:2014-03-14 15:37:01
【问题描述】:
首先,我是一般数据库的新手,所以如果这是一个愚蠢的问题,请在你的答案中提供一些细节,并非常感谢您付出的任何努力!
我在为我的代码设计类结构时遇到了麻烦,我欢迎任何有关此事的建议。我有 3 个数据类
1) 学校
2) 老师
3) 工作坊
学校实体有一个List<Teacher> 和一个List<Workshop> 他们托管。
一个 Workshop Entity 有一个 Host School Entity 和一个 List<Teacher> 的参与者。
一个教师实体有一个List<Workshop> 和一个工作经历List<School>(在下面的代码中没有显示学校列表,因为我要等到以后我先想到更简单的事情,但它是一个目标)
给定城市中的每所学校都将被分配一个条目,仅此而已,教师和研讨会的其他所有内容都必须引用该单个条目。
给定城市中的每一位老师都将被分配到条目/帐户上,仅此而已,因此其他所有内容都必须引用它
我知道我可以使用 ID,但这会涉及大量重复,并且我无法从另一个对象中获取一个对象,条目将是一个 Long 并且即使我制定了自动化整个事情的方法,这会很快耗尽我的查询配额(真的很想避免这种情况)
我希望能够查询单个实体(学校或教师或车间)并能够查看所有其他相关的实体列表。
另外, 教师四处走动,因此我必须能够从一所学校中删除一名教师(作为儿童实体)并将其添加到另一所学校,同时保留哪所学校举办过他们以前的研讨会的记录。
我自己做了这么多
@Entity
public class School
{
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long ID;
@OneToMany(cascade = CascadeType.ALL, mappedBy="school")
private List<Teacher> teachers;
@OneToMany(cascade = CascadeType.ALL,mappedBy="school")
private List<Workshop> workshops;
// Getters and Setters and some methods
}
@Entity
public class Teacher
{
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Key key;
@ManyToOne
private School school;
private List<Workshop> Workshops;
// Getters and Setters and some methods}
@Entity
public class Workshop
{
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Key key;
@ManyToOne
private School school;
private List<Teacher> Participants;
// Getters and Setters and some methods}
目前,我可以将尽可能多的教师和研讨会分配给特定的学校实体,但是,我无法将教师实体(已经分配给学校 - 这里的关键点)分配给研讨会。这是我经常遇到的错误
检测到尝试将 Workshop(no-id-yet) 建立为 School(6148469022523392)/Teacher(5585519069102080) 的父级,但由 School(6148469022523392)/Teacher(5585519069102080) 标识的实体已经是 School(614846902225) 的子级)。一旦对象被持久化,就不能建立或更改父对象。
其顺序取决于首先创建和持久化的实体。
非常感谢并等待任何建议和咨询...我不是在寻找完整的解决方案,我只需要有人指出如何做到这一点(我确定我不是第一个被困在这里的人,我相信慷慨的专家会提供帮助)
【问题讨论】:
标签: java google-app-engine servlets google-cloud-datastore jpa-2.0