2017-01-12 1 views
1

J'essaie de conserver deux types d'objets. Famille et sous-famille. Une famille a une ou plusieurs sous-familles.ORMLite ne crée pas la référence étrangère

Le problème que j'ai est que je peux stocker des données, MAIS référence étrangère est toujours NULL.

Ce sont les classes qui créent la structure de base de données correcte:

Family.java

@DatabaseTable 
public class Family { 

    @DatabaseField(id = true) 
    private Integer id; 

    @DatabaseField 
    private String name; 

    @ForeignCollectionField(eager = true) 
    private ForeignCollection<Subfamily> subfamilies; 

    public Family() {} 

    // public getters and setters 
} 

Subfamily.java

@DatabaseTable 
public class Subfamily { 
    @DatabaseField(id = true) 
    private Integer id; 

    @DatabaseField(foreign = true, foreignAutoRefresh = true) 
    private Family family; 

    @DatabaseField 
    private String name; 

    public Subfamily() {} 

    public Subfamily(String name, Family family) { 
     this.name = name; 
     this.family = family; 
    } 

    // public getters and setters 
} 

Je suis séparé taos, pour la famille d'insertion et Sous-famille

public void insertFamily(Family family) { 
    try { 
     this.familyDao.create(family); 
    } catch (SQLException e) { 
     e.printStackTrace(); 
    } 
} 


public void insertSubfamily(Subfamily subfamily) { 
    try { 
     this.subfamilyDao.create(subfamily); 
    } catch (SQLException e) { 
     e.printStackTrace(); 
    } 
} 

Ensuite, quand je crée une famille et une sous-famille comme celle-ci, le champ étranger semble toujours NULL. Je ne sais pas ce que je fais mal ..

Family f1 = new Family("FAMILY ONE"); 
mFamilyDao.insertFamily(f1); 
Subfamily s1 = new Subfamily("SUBFAMILY OF FAMILY ONE", f1); 
mSubfamilyDao.insertSubfamily(s1); 

Foreign null

Répondre

1

Puis, quand je crée une famille et comme celui-ci Sous-famille, le champ étranger semble toujours NULL. Je ne sais pas ce que je fais mal ..

Family f1 = new Family("FAMILY ONE"); 
familyDao.insertFamily(f1); 
Subfamily s1 = new Subfamily("SUBFAMILY OF FAMILY ONE", f1); 
subfamilyDao.insertSubfamily(s1); 

Ok. Ce code sur la surface semble bien, donc la liste suivante est plus de choses à essayer et de déboguer des indices qu'une solution.

  • Etes-vous sûr que vous ne voulez pas generatedId = true pour les deux champs id? Sinon, vous devrez définir vous-même la valeur du champ id.
  • Etes-vous sûr que le champ f1 'd id n'est pas également null? Où est ce champ défini? Vous devez enregistrer la valeur de f1.getId() après que la méthode insertFamily(...) est retournée pour s'assurer que la valeur est un entier.
  • Voulez-vous vraiment que le champ soit un Integer? Est-ce que le id peut être null? J'utilise habituellement int ou long pour mes champs d'identification. Et que fait le insertFamily(...)? Pourquoi n'appelez-vous pas simplement le dao.create(...)?

Espérons que quelque chose ici aide. Oh, et enfin, dites pas à la notation hongroise si vous le pouvez. Utilisez la coloration sur votre IDE pour le remplacer. :-)

+0

Super !! le problème a été résolu avec * generatedId = true *. Merci également pour tous les conseils et conseils que vous m'avez donnés. – adalPaRi