# Datenbankproblem



## gast (2. Nov 2008)

Hallo @all,

ich habe eine kurze Frage.

Und zwar hab ich eine Entität Person angelegt (name adresse etc.) und eine Entität

User, die in einer OneToOne relation steht.

Somit hat also jeder User eine person_id.

Wie kann ich jetzt auf diese person_id zugreifen?

Ich arbeite mit JPA und Hibernate Inline-sql alá "select person_id from usw." funktioniert nicht.


Hat jemand eine Idee?


Gruß!


----------



## SlaterB (3. Nov 2008)

ist das eine SQL-Anfrage oder z.B. HQL?
in HQL kannst du nur das ansprechen, was auch gemappt wurde, was dann Attribut in der Java-Klasse ist,

wenn dort Long personId steht und das ordentlich gemappt ist, dann kannst du auf personId zugreifen,
Java-Variablen sollten normalerweise keinen Unterstrich enthalten,

typisch ist auch, dass in Person direkt ein User gemappt ist, dann sollte funktionieren:
select person.id from user

falls in person ein Attribut id gemappt ist,
aber du kannst auch direkt das Person-Objekt laden


----------



## Gast (3. Nov 2008)

es ist ne SQL anfrage.

Und es ist so, dass die person_id automatisch mittels Annotationen erzeugt wird :

@OneToOne
private Person person;

Dann erzeugt er mir automatisch in der MySQL-Tabelle den Eintrag person_id (keine java variable also). Auf den würde ich jetzt gerne zugreifen können weiss aber nicht wie. Es sind ja auch keine Getter und Setter da, sonst könnte ich ja ganz normal den User auslesen und mittels getPerson_Id() irgendwie was machen.

Was mich allerdings wunder ist das "select person_id from..." nicht funktionieren will


----------



## SlaterB (3. Nov 2008)

du willst also eine SQL-Anfrage stellen, funktioniert es mit irgendeinem externen Tool?

und nun in Hibernate oder wo immer du bist, JPA ist wohl was anderes,
wie gehst du dort denn genau vor?

benutzt du spezielle Hilfsmethoden wie beispielsweise
org.hibernate.Session.createSQLQuery(String)
?

allgemein ist es nicht empfehlenswert, echte SQL-Anfragen zu stellen,
weißt du nur nicht wie du es in HQL machen kannst?


----------



## Gast (3. Nov 2008)

prinzipiell ist es so, dass ich hibernate,jpa und struts nutze.

man entwirft ne java-bean (entität user von mir aus) mit getter und setter etc.

dann noch ne klasse personDAO (data access) in man klassen wie z.b. update,retrieve,remove hat. der üblich kram halt.

in dieser klasse, will ich nun eine methode haben die mir die user_id zurückgibt (als input kriegt sie halt z.b. die userId).




```
public Person retrieveByUserId(int userId) {
		final int bla = ()Integer)em.createQuery(
				"select person_id from User  where user_id=\'" + userId + "\'")).intValue();
				
		return list.get(0);
	}
```


wenn ich jetzt in meiner action-klasse sowas mache wie 


```
uDAO (das user access object)

int i=uDAO.retrieveByUserId(3);
```

kommt da leider nix bei rum. 


ich kriegs nicht hin -.- ich will zerstören


----------



## SlaterB (4. Nov 2008)

du hast createQuery und nicht createSQLQuery, ist das so schwer?

createQuery ist natürlich gar nicht falsch, aber dann darst du nur gemappte Attribute der Klassen verwenden,
z.B.

select u.person.id from User u where u.id=\'" + userId + "\'"))

oder so, je nachdem, wie deine Klassen aussehen und verknüpft sind,
mehr als das aus meiner ersten Antwort zu wiederholen kann ich nicht helfen

oder doch, Tipp:
fange einfach an, lade erstmal Objekte mit "from User" (Select braucht man nicht unbedingt),
dann Einschränkung
"from User where id = .."
usw.

Schritt für Schritt vorgehen


----------



## Gast (4. Nov 2008)

okay danke dir habs hinbekommen!

grüße!


----------

