2016-07-19 114 views
0

我想列出具有内部集合的对象。我可以保存和检索对象就好了,但是当我做:用集合获取对象

parentRepo.findAll()

只有最后一个对象有它的上市子对象,其他人有一个空的集合。

父模型

@ForeignCollectionField(eager = false) private Collection<Child> childs;

儿童模式

@DatabaseField(foreign=true,foreignAutoRefresh=true) private Parent parent;

渴望真正没有任何区别。如果我查询一个孩子并得到它的父母,我也可以得到它的孩子。我错过了什么?

编辑:

它正在为我所做的建模工作。我的错误是我需要父母和孩子之间的多对多关系。我做了一个快速的研究,我需要的是实现这一目标的中间模型。我将结束这个问题,并试图在我的模型之间建立这种多对多的关系。

+0

我只是意识到我需要一个多对多的关系,而不是多对一的关系。 – user1411166

回答

2

我解决了像这样的多对多关系: 这是一个正在进行的项目的例子。准备和GlideWax之间有多对多的关系。为了解决它,我使用你的课:准备,GlideWax和PreparationGlideWax。 PreparationGlideWax表示其他类之间的连接,就像您通常与关系中的表之间的“链接”表所解决的多对多关系一样。正如你所看到的GripWax和Structure也有许多关系准备。下面是代码:

GlideWax.java

@DatabaseTable(tableName = "glide_waxes") 
public class GlideWax { 

    @DatabaseField(id = true) 
    private int id; 

    @DatabaseField(canBeNull = false) 
    private String name; 

    @DatabaseField 
    private String description; 

    @DatabaseField(canBeNull = false) 
    private int inUse; 

    @DatabaseField(foreign=true) 
    private WaxBrand waxBrand; 

    @DatabaseField(foreign=true) 
    private GlideWaxType glideWaxType; 

    @ForeignCollectionField 
    private ForeignCollection<PreparationGlideWax> preparationGlideWaxes; 

    @ForeignCollectionField 
    private ForeignCollection<TestSessionGlideWax> testSessionGlideWaxes; 

    public GlideWax() { 
    } 

    public int getId() { 
     return id; 
    } 

    public void setId(int id) { 
     this.id = id; 
    } 

    public String getName() { 
     return name; 
    } 

    public void setName(String name) { 
     this.name = name; 
    } 

    public String getDescription() { 
     return description; 
    } 

    public void setDescription(String description) { 
     this.description = description; 
    } 

    public int getInUse() { 
     return inUse; 
    } 

    public void setInUse(int inUse) { 
     this.inUse = inUse; 
    } 

    public WaxBrand getWaxBrand() { 
     return waxBrand; 
    } 

    public void setWaxBrand(WaxBrand waxBrand) { 
     this.waxBrand = waxBrand; 
    } 

    public GlideWaxType getGlideWaxType() { 
     return glideWaxType; 
    } 

    public void setGlideWaxType(GlideWaxType glideWaxType) { 
     this.glideWaxType = glideWaxType; 
    } 

    public ForeignCollection<PreparationGlideWax> getPreparationGlideWaxes() { 
     return preparationGlideWaxes; 
    } 

    public void setPreparationGlideWaxes(ForeignCollection<PreparationGlideWax> preparationGlideWaxes) { 
     this.preparationGlideWaxes = preparationGlideWaxes; 
    } 

    public ForeignCollection<TestSessionGlideWax> getTestSessionGlideWaxes() { 
     return testSessionGlideWaxes; 
    } 

    public void setTestSessionGlideWaxes(ForeignCollection<TestSessionGlideWax> testSessionGlideWaxes) { 
     this.testSessionGlideWaxes = testSessionGlideWaxes; 
    } 

}

Preparation.java

@DatabaseTable(tableName = "preparations") 
public class Preparation { 

    @DatabaseField(generatedId=true) 
    private int id; 

    @ForeignCollectionField 
    private ForeignCollection<PreparationGlideWax> preparationGlideWaxes; 

    @ForeignCollectionField 
    private ForeignCollection<PreparationGripWax> preparationGripWaxes; 

    @ForeignCollectionField 
    private ForeignCollection<PreparationStructure> preparationStructures; 

    @DatabaseField(foreign=true, canBeNull = false) 
    private SkiPair skiPair; 

    @DatabaseField(foreign=true, canBeNull = false) 
    private SkiTester skiTester; 

    @DatabaseField(foreign=true) 
    private Rfid rfid; 

    @DatabaseField(foreign=true, canBeNull = false) 
    private TestSession testSession; 

    @ForeignCollectionField 
    private ForeignCollection<Measurement> measurements; 

    public Preparation() { 
    } 

    public int getId() { 
     return id; 
    } 

    public void setId(int id) { 
     this.id = id; 
    } 

    public ForeignCollection<PreparationGlideWax> getPreparationGlideWaxes() { 
     return preparationGlideWaxes; 
    } 

    public void setPreparationGlideWaxes(ForeignCollection<PreparationGlideWax> preparationGlideWaxes) { 
     this.preparationGlideWaxes = preparationGlideWaxes; 
    } 

    public ForeignCollection<PreparationGripWax> getPreparationGripWaxes() { 
     return preparationGripWaxes; 
    } 

    public void setPreparationGripWaxes(ForeignCollection<PreparationGripWax> preparationGripWaxes) { 
     this.preparationGripWaxes = preparationGripWaxes; 
    } 

    public ForeignCollection<PreparationStructure> getPreparationStructures() { 
     return preparationStructures; 
    } 

    public void setPreparationStructures(ForeignCollection<PreparationStructure> preparationStructures) { 
     this.preparationStructures = preparationStructures; 
    } 

    public SkiPair getSkiPair() { 
     return skiPair; 
    } 

    public void setSkiPair(SkiPair skiPair) { 
     this.skiPair = skiPair; 
    } 

    public SkiTester getSkiTester() { 
     return skiTester; 
    } 

    public void setSkiTester(SkiTester skiTester) { 
     this.skiTester = skiTester; 
    } 

    public Rfid getRfid() { 
     return rfid; 
    } 

    public void setRfid(Rfid rfid) { 
     this.rfid = rfid; 
    } 

    public TestSession getTestSession() { 
     return testSession; 
    } 

    public void setTestSession(TestSession testSession) { 
     this.testSession = testSession; 
    } 

}

PreparationGlideWax.java

@DatabaseTable(tableName = "preparation_glide_wax") 
public class PreparationGlideWax { 

    @DatabaseField(generatedId=true) 
    private int id; 

    @DatabaseField(canBeNull = false) 
    private int layer; 

    @DatabaseField(foreign=true, canBeNull = false) 
    private GlideWax glideWax; 

    @DatabaseField(foreign=true, canBeNull = false) 
    private Preparation preparation; 

    public PreparationGlideWax() { 
    } 

    public int getId() { 
     return id; 
    } 

    public void setId(int id) { 
     this.id = id; 
    } 

    public int getLayer() { 
     return layer; 
    } 

    public void setLayer(int layer) { 
     this.layer = layer; 
    } 

    public GlideWax getGlideWax() { 
     return glideWax; 
    } 

    public void setGlideWax(GlideWax glideWax) { 
     this.glideWax = glideWax; 
    } 

    public Preparation getPreparation() { 
     return preparation; 
    } 

    public void setPreparation(Preparation preparation) { 
     this.preparation = preparation; 
    } 

}

+0

我正是这样解决了我的问题。我会接受你对未来访客的回答。 – user1411166

0

正如我在编辑中所说的,我可以从父母中加载孩子就好了。我的问题是我需要模型之间的多对多关系。我会在两天内接受这个答案。