我是Play框架和yml表示法的新手,并且只知道Hibernate的基础知识。我试图使用.yml文件设置一些测试数据。我尝试定义几个Question对象和一个引用同一个Competition对象的ActiveCompetition对象。我的.yml文件看起来像这样(我删除了我认为不相关的内容):
ActiveCompetition(1): &myactivecompetition
activeCompetition: &mycompetition
name: Name of the competition
Question(11):
title: Title 1
competition: *mycompetition
Question(12):
title: Title 2
competition: *mycompetition
Question(13):
title: Title 3
competition: *mycompetition
我工作,但似乎 Hibernate将mycompetition保存4次。
在java bean中,javax.persistence的属性设置如下:
@Entity
@Transactional
public class ActiveCompetition extends Model {
@Required
@OneToOne(cascade= CascadeType.ALL)
private Competition activeCompetition;
}
@Entity
@Transactional
public class Question extends Model {
...
@Required
@OneToOne(cascade= CascadeType.ALL)
private Competition competition;
}
如何让Hibernate明白* mycompetition应该只存储在数据库中一次?我应该在.yml文件上写入数据库ID吗?如果是这样,我该怎么做?我已经尝试添加例如' id:99'在activeCompetition下但它没有帮助。
答案 0 :(得分:1)
有两个可能的问题:
首先,您要声明关联的OneToOne,然后在您的YAML文件中创建ManyToOne关系。 OneToOne意味着每个ActiveCompetition最多只有一个问题,每个问题最多只涉及一个ActiveCompetition。
你想要的是一个ManyToOne关系,其中ActiveCompetition有很多问题。您应该更新Java代码。
第二个是您将ActiveCompetition定义为:
ActiveCompetition(1)
在YAML,AFAIK中,您通过随实体提供的引用引用文件中的其他实体(或者我是如何做的)。在上面的声明中,引用是()之间的数字1
。
因此,您应该将文件更改为:
Question(13):
title: Title 3
competition: 1