2013-02-21 1 views
2

Je ne peux pas obtenir l'objet dbRef de Mongo. Dans mon package d'entité, j'ai une classe User avec une classe Parent héritant. Voici la classe User:obtenir dbref à partir du document dans Mongo en utilisant Java

public class User { 

@Id 
private ObjectId id; 

@DBRef 
private Account account; 

private String name; 

public String getId() { 
    if (id != null) { 
     return id.toStringMongod(); 
    }   

    return null;//no id 
} 

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

public Account getAccount() { 
    return account; 
} 

public void setAccount(Account account) { 
    this.account = account; 
} 
public String getLogin() { 
    return login; 
} 

public void setLogin(String login) { 
    this.login = login; 
} 
} 

Comme vous pouvez le voir ci-dessus, je suis en train un objet de Account ici. Ma Parent classe qu'étendre User:

@Document 
public class Parent extends User { 

@JsonProperty("is_activated") 
private boolean isActivated; 

public boolean isActivated() { 
    return isActivated; 
} 

public void setActivated(boolean isActivated) { 
    this.isActivated = isActivated; 
} 
} 

Note: rien de magique avec isActivated.

Dans ma classe ParentDaoImpl:

@Service 
public class ParentDaoImpl extends AbstractDaoImpl implements ParentDao { 

@Override 
public Parent getParentByLogin(String login) { 
    Query query = new Query(Criteria.where("login").is(login)); 
    return mongoOperations.findOne(query, Parent.class, "parents"); 
} 
} 

Le problème est que si je l'appelle méthode getParentByLogin, elle retourne evertyning mais Account champ est nul. Peut-être findOne ne donne pas dbRef à l'intérieur. Je pense que dans les bases de données relationnelles, il y aurait quelque chose comme join. Je veux que ma méthode me donne aussi le champ account.

Merci pour votre aide!

+1

Vous avez défini quelque chose dans le champ de compte? Si elle renvoie null, je suppose que c'est ... null. Vous ne savez pas si le pilote mongodb java résout automatiquement le dbref. Peut-être que vous avez besoin d'ajouter des annotations (configuration) pour charger automatiquement les dbrefs. – philnate

+0

Je n'ai pas mentionné la classe 'Account' ici. Créer un compte avant que getParentBylogin ne soit fourni. Je veux dire que j'ai d'abord créé un compte pour le parent (je peux l'obtenir dans mongo shell ou via mon application), puis essayé d'obtenir le parent entier – boburShox

+1

Utilisez-vous le pilote mongodb java pur ou un cadre autour de lui comme Spring Data /morphine? @Service ressemble à Spring Data. Peut-être que vous devriez donner un bref exemple de la façon dont vous remplissez votre base de données en premier lieu. Peut-être qu'il y a l'erreur. – philnate

Répondre

2

Pouvez-vous essayer quelque chose comme ceci.

.... 
@Field("fieldName") 
@DBRef(collection = "mongoCollectionName") 
private Account account; 
.... 
+0

merci pour la réponse. Je l'ai essayé, sans succès. Toujours retourner null, même s'il existe un compte spécifique lié à l'objet parent – boburShox

+0

Première fois que j'ai essayé à l'aide de votre réponse semblait échouer. Mais récemment, je l'ai fait. Merci beaucoup! – boburShox

+0

heureux d'entendre que cela a fonctionné. – harunyardimci

Questions connexes