Bonjour,
Je suis débutante sur ce type de langages (Java/Objectify) et je rencontre un problème.
Je vous explique tout, je dispose de trois classes qui fonctionnent de la manière suivante:
Un Server a comme parent un Site qui a comme parent un Country.
J'ai travaillé sur mes classes Site et Country sans problème, j'arrive à récupérer facilement les informations de mon Country en passant par un Site, exemple:
Qui me retourne bien: "France"
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 Site site = ofy().load().type(Site.class).filter("name", "Angers").first().now(); System.out.println(ofy().load().key(site.getCountry()).now().getName());
Cependant, lorsque j'essaie de récupérer mon Site sur un Server de la même manière:
Qui me renvoie une java.lang.NullPointerException
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 System.out.println("- Server->Site - "+ofy().load().key(a.getSite()).now().getName());
D'ailleurs lorsque j'effectue simplement un getSite, celui-ci est effectivement null:
Qui m'affiche bien "null".
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 Site x=ofy().load().key(a.getSite()).now(); if(x==null) System.out.println("null"); else System.out.println("NOT null");
Pourtant j'effectue un test directement dans mon constructeur:
Qui m'affiche bien: Key<?>(Site(4754288278503424))=Key<?>(Site(4754288278503424))
Code : Sélectionner tout - Visualiser dans une fenêtre à part System.out.println(serverSite.toString()+"="+this.site.toString());
Pour en finir à propos des tests, un petit dernier que j'effectue après création de la Key dans le programme (et je pense que mon problème vient d'ici):
Qui m'affiche 0 pour la correspondance:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 List<Site> yy=ofy().load().type(Site.class).filter("name","Dijon").list(); cleSitekey = Key.create(Site.class, yy.get(0).getId()); System.out.println("CLE SITE: "+cleSiteid.toString()); List<Site> l=ofy().load().type(Site.class).filter("name",yy.get(0).getName()).list(); for(int i = 0; i < l.size(); i++){ Key<Site> keysiteserv= Key.create(Site.class, l.get(i).getId()); System.out.println("index " + i + " = " + l.get(i).getName()+" - "+ l.get(i).getId()); System.out.println(cleSitekey.toString()); System.out.println(cleSitekey.compareTo(keysiteserv)); }
Élément à l'index 0 = Dijon - 4754288278503424
Key<?>(Site(4754288278503424))
0
N'ayant que des connaissances en BDD relationnelles, je me demande si je n'ai pas un peu de mal à comprendre le fonctionnement du DataStore, des Keys et si c'est une erreur de compréhension de ma part ou si c'est dans mon code que je me suis trompée.
Je vous fais un abrégé rapide de mes classes Site et Serveur:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29 @Entity @Index public class Site { @Id Long idSite; private String name; @Parent Key<Country> country; @SuppressWarnings("unused") private Site(){} public Site(String siteName, Key<Country> siteCountry){ if(siteCountry!=null){ List<Site> l=ofy().load().type(Site.class).filter("name",siteName).ancestor(siteCountry).list(); if(l.size()==0){ System.out.println("Object created."); this.name=siteName; this.country=siteCountry; ofy().save().entity(this).now(); } else { System.out.println("Object creation stopped, it already exists."); } } } //getters+setters etc }En vous remerciant de votre attention.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54 @Entity @Index public class Server { @Id Long idServer; private String hostname; private String ip; private int status; private String statusDate; private String lastTimeUp; @Parent Key<Site> site; @SuppressWarnings("unused") private Server(){} public Server(String serverHostName, String serverIp, int serverStatus, String serverStatusDate, String serverLastTimeUp, Key<Site> serverSite){ System.out.println("enter constructeur."); if(serverSite!=null){ List<Server> l=ofy().load().type(Server.class).filter("hostname",serverHostName).filter("ip",serverIp).ancestor(serverSite).list(); System.out.println("list constructeur ok."); if(l.size()==0){ this.hostname = serverHostName; this.ip = serverIp; this.status = serverStatus; this.statusDate = serverStatusDate; this.lastTimeUp = serverLastTimeUp; this.site = serverSite; System.out.println("Test des valeurs enregistrées"); System.out.println(serverHostName+"="+this.hostname); System.out.println(serverIp+"="+this.ip); System.out.println(serverStatus+"="+this.status); System.out.println(serverLastTimeUp+"="+this.lastTimeUp); System.out.println(serverSite.toString()+"="+this.site.toString()); System.out.println("Test des valeurs enregistrées fin"); try{ ofy().save().entity(this).now(); System.out.println("Object created."); } catch(Exception ex){ System.out.println("Enregistrement interrompu."); System.out.println(ex.getMessage()); System.out.println(ex.getLocalizedMessage()); } } else { System.out.println("Object creation stopped, it already exists."); } } } //getters/setters/etc }
Partager