een*_*nto 5 android many-to-many ormlite foreign-collection
我有两节课:
UniteStratigraphique.java:
@DatabaseTable(tableName = "unitestratigraphique")
public class UniteStratigraphique {
public final static String ID_FIELD_NAME = "id";
@DatabaseField(generatedId = true, columnName = ID_FIELD_NAME)
private int id;
// CAMPAGNES
@DatabaseField(foreign = true, foreignAutoRefresh = true)
private Campagne campagne;
@ForeignCollectionField
private ForeignCollection<Campagne> listeCampagnes;
public UniteStratigraphique() {}
public Campagne getCampagne() {
return campagne;
}
public void setCampagne(Campagne campagne) {
this.campagne = campagne;
}
public ArrayList<Campagne> getListeCampagnes() {
ArrayList<Campagne> campagnesArray = new ArrayList<Campagne>();
for (Campagne campagne : listeCampagnes) {
campagnesArray.add(campagne);
}
return campagnesArray;
}
public ForeignCollection<Campagne> getListeCampagnesForeign() {
return listeCampagnes;
}
public void setListeCampagnes(ForeignCollection<Campagne> listeCampagnes) {
this.listeCampagnes = listeCampagnes;
}
}
Run Code Online (Sandbox Code Playgroud)
Campagne.java:
@DatabaseTable(tableName = "campagne")
public class Campagne {
@DatabaseField(generatedId = true)
private int id;
// UNITE STRATIGRAPHIQUE
@ForeignCollectionField
private ForeignCollection<UniteStratigraphique> listeUniteStratigraphique;
@DatabaseField(foreign = true, foreignAutoRefresh = true)
private UniteStratigraphique uniteStratigraphique;
public Campagne() {}
public ArrayList<UniteStratigraphique> getListeUniteStratigraphique() {
ArrayList<UniteStratigraphique> usArray = new ArrayList<UniteStratigraphique>();
for (UniteStratigraphique us : listeUniteStratigraphique){
usArray.add(us);
}
return usArray;
}
public ForeignCollection<UniteStratigraphique> getListeUniteStratigraphiqueForeign() {
return listeUniteStratigraphique;
}
public void setListeUniteStratigraphique(
ForeignCollection<UniteStratigraphique> listeUniteStratigraphique) {
this.listeUniteStratigraphique = listeUniteStratigraphique;
}
public int getSizeListeUniteStratigraphique() {
return listeUniteStratigraphique.size();
}
public UniteStratigraphique getUniteStratigraphique() {
return uniteStratigraphique;
}
public void setUniteStratigraphique(UniteStratigraphique uniteStratigraphique) {
this.uniteStratigraphique = uniteStratigraphique;
}
}
Run Code Online (Sandbox Code Playgroud)
如您所见,这些是多对多链接(0 ... n --- 0 ... n,带有ORMLite注释).
现在,我的工作流程是:
我创建了多个"UniteStratigraphique"类,并将它们存储到我的数据库中(这很好).
=>所以我存储了n*"UniteStratigraphique".
之后我想要的是创建一个"Campagne"类,它将包含多个"UniteStratigraphique"类.
=>所以我想从"Campagne.java"设置这个字段:
@ForeignCollectionField
private ForeignCollection<UniteStratigraphique> listeUniteStratigraphique;
Run Code Online (Sandbox Code Playgroud)
使用之前存储的n*"UniteStratigraphique"元素.
我尝试使用这个DAO方法执行此操作,但它只将"UniteStratigraphique"类复制到我的数据库中,并且没有链接.
public void addUsToCampagne(Campagne campagne,
ArrayList<UniteStratigraphique> usArray) {
ForeignCollection<UniteStratigraphique> usForeign = campagne
.getListeUniteStratigraphiqueForeign();
if (usForeign == null) {
try {
usForeign = getHelper().getCampagneDao()
.getEmptyForeignCollection("listeUniteStratigraphique");
for (UniteStratigraphique us : usArray) {
usForeign.add(us);
}
} catch (SQLException e) {
e.printStackTrace();
}
}else{
for (UniteStratigraphique us : usArray) {
usForeign.add(us);
}
}
}
Run Code Online (Sandbox Code Playgroud)
在我的活动中,我这样做:
db.addCampagne(campagne);
if( myUniteStratigraphiqueArray.size() > 0){
db.addUsToCampagne(campagne, myUniteStratigraphiqueArray);
}
Run Code Online (Sandbox Code Playgroud)
对于ORMLite,多对多关系是非自动的,实现它的唯一方法是仅为这两个类之间的链接创建第三个表.
此链接指的是这个问题:使用ORMLite实现多对多关系的最佳方法是什么?
这里的例子:https://github.com/j256/ormlite-jdbc/tree/master/src/test/java/com/j256/ormlite/examples/manytomany
希望它有所帮助.
| 归档时间: |
|
| 查看次数: |
10402 次 |
| 最近记录: |