使用yml表示法定义的对象重复项

时间:2012-04-24 11:57:09

标签: hibernate playframework yaml playframework-1.x

我是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下但它没有帮助。

1 个答案:

答案 0 :(得分:1)

有两个可能的问题:

首先,您要声明关联的OneToOne,然后在您的YAML文件中创建ManyToOne关系。 OneToOne意味着每个ActiveCompetition最多只有一个问题,每个问题最多只涉及一个ActiveCompetition。

你想要的是一个ManyToOne关系,其中ActiveCompetition有很多问题。您应该更新Java代码。

第二个是您将ActiveCompetition定义为:

ActiveCompetition(1)

在YAML,AFAIK中,您通过随实体提供的引用引用文件中的其他实体(或者我是如何做的)。在上面的声明中,引用是()之间的数字1

因此,您应该将文件更改为:

Question(13):
    title: Title 3
    competition: 1