我在我的Play應用程序中使用logisimayml 1.5模塊從我的活動數據庫中的內容生成yml。該模塊遍歷JPA類來識別孩子以確定寫入yml的內容。在Play Framework中使用logisimayml模塊
所以,如果我有兩個簡單的JPA類是這樣的:
public class Parent extends Model {
@OneToMany(mappedBy = "parent", targetEntity = Child.class)
public List<Child> children;
...
}
public class Child extends Model {
@ManyToOne
@JoinColumn(name = "parent_id")
public Parent parent;
...
}
當我運行logisimayml,它會產生一個data.yml文件看起來像這樣:
Parent(Parent_1):
name: Bill
children:
- Child_1
Parent(Parent_2):
name: Bill
Child(Child_3):
name: Jill
Child(Child_1):
name: Jill
parent: Parent_1
現在YML以上代表什麼是JPA類代表但是我想使用data.yml文件加載到我的應用程序使用:
Fixtures.loadModels("data.yml");
這不太合適,因爲比爾是第一個,它想要找到孩子吉爾。吉爾然而還沒有被宣佈,因此它跌倒了。這源於我在Parent中使用了@OneToMany和在Child中使用了@ManyToOne,這意味着它是雙向的。我可以刪除@OneToMany,但我仍然希望在那裏爲我的代碼。有誰知道我能做些什麼來保持JPA類的原樣,但是如果沒有父和子之間的無限循環,yml呈現?
更新:這裏的例外,我看的時候,我開始了我的Play應用程式指向由logisimayml創建的data.yml:
RuntimeException occured : Cannot load fixture data.yml: No previous reference found for object of type sites with key User_25
在data.yml引用User_25作爲孩子的第一個對象。 User_25的聲明在我的data.yml中更爲深入。正如Luffy在下面提到的,我簡單的Parent-Child示例實際上並不會導致發生異常。我的實際項目有一個相當大的數據庫,所以很難在這裏以一個簡單的例子進行復制,儘管我認爲這與雙向註釋有關,但我估計不會。我也爲上面的示例更新了data.yml。我實際上做了Luffy所做的事情,並用簡單的Parent-Child示例創建了一個實際項目,並在運行該模塊之後,實際上產生了與我手工製作的yml稍有不同的東西。在Fixtures.loadModels(..)調用中使用這個yml實際上可以工作,但它並不完全如我在生產中看到的那樣反映問題,所以我將不得不再次回到你。
在我的實際代碼中,我有lazy的獲取類型。我只是沒有在OP的例子中加入它。 – digiarnie 2012-01-12 06:42:36
這很奇怪,我只是在新的遊戲項目中測試你的senario。它的加載簡單的例子yml在boostrap成功。我在那裏查了數據庫賬單和jill。我正在使用遊戲1.2.4。我手動創建yml文件。使用postgresql進行測試。 – Luffy 2012-01-12 07:21:37
你是對的。我在OP中放入的簡單例子實際上很有用。我的大型應用程序與大型XML仍然無法正常工作。我將不得不回到一個實際複製我看到的問題的例子。感謝您在我的超級簡單示例中找到這個問題! – digiarnie 2012-01-12 07:38:51