# Hibernate-Updateproblem



## 7bkahnt (28. Apr 2010)

Grüsst euch,
ich habe ein denk ich recht einfaches Problem, zu dem ich gerade aber keine Lösung finde.
Ich möchte einen bestimmten Datensatz updaten.


```
session = HibernateSessionFactory.getSession();
tr = session.beginTransaction();

String statement = "update Vor_tbspiel_t tbspiel set tbspiel.text255 = ?, tbspiel.zahl6=?, tbspiel.f_id_a_sb=?, tbspiel.dat_a=?  where tbspiel.id = ?";
				int updatedEntities = session.createQuery( statement )
				        .setString(0, text)
				        .setInteger(1,zahl)
				        .setInteger(2,usid)
				        .setString(3, zeit)
				        .setInteger(4, auswahlid)
				        .executeUpdate();
tr.commit();
```


Auf auswahlid steht die ID des vom Nutzer gewählten Datensatzes.
Wenn ich nur text und zahl update  funktioniert es tadellos. Sobald ich aber noch einen dritten Wert updaten will kommt ein Fehler.
org.hibernate.QueryException: could not resolve property: f_id_a_sb of: db.Vor_tbspiel_t [update db.Vor_tbspiel_t tbspiel set tbspiel.text255 = ?, tbspiel.zahl6=?, tbspiel.f_id_a_sb=?, tbspiel.dat_a=?  where tbspiel.id = ?]

Muss ich bei der querylanguage da irgendwas beachten, wenn ich mehr als 2 Werte updaten möchte?

grüsse


----------



## Gast2 (28. Apr 2010)

7bkahnt hat gesagt.:


> Muss ich bei der querylanguage da irgendwas beachten, wenn ich mehr als 2 Werte updaten möchte?
> 
> grüsse



Nö, ob du einen oder alle Werte eines Tabelle updates ist egal.  Ist der Spaltenname korrekt? Das ORM richtig definiert, sprich die Klasse hat auch die Property?


----------



## SlaterB (28. Apr 2010)

> wenn ich mehr als 2 Werte updaten möchte?

ein sehr simpler Test könnte dir das selber beantworten:
update NUR f_id_a_sb, lasse die ersten beiden weg

-----

aber egal, die Fehlermeldung lautet hier ja nicht 'cannot update more than 2 values', 
sondern 'could not resolve property: f_id_a_sb of: db.Vor_tbspiel_t',
also am besten einfach danach richtigen, f_id_a_sb ist unbekannt,
wie sieht denn die Java-Klasse, die DB-Tabelle und das Mapping dazwischen komplett aus?


----------



## 7bkahnt (28. Apr 2010)

Okay stimmt, ich habe es mal nur mit zahl und usid probiert und es kommt derselbe Fehler.
Verstehe ich aber nicht, weil usid ist ne ganz normale Integer-Variable, die ich mir vorher sogar ausgeben lasse. Also belegt ist sie. Und diese soll eben in die Spalte f_id_a_sb geschrieben werden.(Welche auch mit Integer festgelegt ist)

Vor_tbspiel_t.java:

```
package db;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;


@Entity
@Table(name="vor_tbspiel_t")
public class Vor_tbspiel_t {
	
	private Integer id;
	private String text255;
	private Integer zahl6;
	private Integer f_id_a_sb;
	private String datum_a;
	private Integer f_id_c_sb;
	private String datum_c;
	private String sessionid;
	
	
	
	public Vor_tbspiel_t() {
	}
	@Id
	@GeneratedValue
	@Column(name="ID")
	public Integer getId() {
		return id;
	}
	public void setId(Integer id) {
		this.id = id;
	}
	
	@Column(name="TEXT255")
	public String getText255() {
		return text255;
	}
	public void setText255(String text255) {
		this.text255 = text255;
	}
	@Column(name="ZAHL6")
	public Integer getZahl6() {
		return zahl6;
	}
	public void setZahl6(Integer zahl6) {
		this.zahl6 = zahl6;
	}
	
	@Column(name="F_ID_A_SB")
	public Integer getF_id_a_sb() {
		return f_id_a_sb;
	}
	public void setF_id_a_sb(Integer f_id_a_sb) {
		this.f_id_a_sb = f_id_a_sb;
	}
	@Column(name="DAT_A")
	public String getDatum_a() {
		return datum_a;
	}
	public void setDatum_a(String datum_a) {
		this.datum_a = datum_a;
	}
	
	@Column(name="F_ID_C_SB")
	public Integer getF_id_c_sb() {
		return f_id_c_sb;
	}
	public void setF_id_c_sb(Integer f_id_c_sb) {
		this.f_id_c_sb = f_id_c_sb;
	}
	
	@Column(name="DAT_C")
	public String getDatum_c() {
		return datum_c;
	}
	public void setDatum_c(String datum_c) {
		this.datum_c= datum_c;
	}
	
	@Column(name="SESSIONID")
	public String getSessionid() {
		return sessionid;
	}
	public void setSessionid(String sessionid) {
		this.sessionid = sessionid;
	}
}
```

Und die cfg.xml:

```
<session-factory>
	<property name="connection.username">system</property>
	<property name="connection.url">jdbc:oracle:thin:@localhost:1521:XE</property>
	<property name="dialect">org.hibernate.dialect.Oracle9Dialect</property>
	<property name="connection.password">adminadmin</property>
	<property name="connection.driver_class">oracle.jdbc.driver.OracleDriver</property>
	<property name="connection.useUnicode">true</property>
	<property name="connection.characterEncoding">UTF-8</property>
	<property name="connection.provider_class">org.hibernate.connection.C3P0ConnectionProvider</property>

	<property name="c3p0.acquire_increment">1</property>
	<property name="c3p0.idle_test_period">27000</property>
	<property name="c3p0.max_size">10</property>
	<property name="c3p0.max_statements">0</property>
	<property name="c3p0.min_size">1</property>
	<property name="c3p0.timeout">100</property>
	
	<property name="show_sql">true</property>
    <mapping class="db.Vor_anwender_t" />
    <mapping class="db.Vor_tbspiel_t" />
</session-factory>
```


----------



## SlaterB (28. Apr 2010)

ein Property eines JavaBean hat eine genaue Syntax,

das Klassenattribut heißt
aaaaBbbbb

und die getter und setter dazu
getAaaaBbbbb();
setAaaaBbbbb(..);

genau wie das Attribut nur der erste Buchstabe groß, nicht alles groß wie bei dir, und auch noch Buchstaben weggelassen..,

getF_ID_A() schlecht
getF_id_a_sb() geht vielleicht

Unterstriche solltest du auch wenn irgend möglich vermeiden


----------



## 7bkahnt (29. Apr 2010)

Okay jetzt hab ich alle getter und setter angepasst (siehe oben) und hab das update mit session.update realisiert. 

```
session = HibernateSessionFactory.getSession();
tr = session.beginTransaction();

Vor_tbspiel_t tbspiel = (Vor_tbspiel_t) session.get(Vor_tbspiel_t.class,auswahlid);
				tbspiel.setText255(text);
				tbspiel.setZahl6(zahl);
				tbspiel.setF_id_a_sb(usid);
				tbspiel.setDatum_a(zeit);
				session.update(tbspiel);
				tr.commit();
```

Wunderbar jetzt funktionierts!
Danke euch für die schnelle Hilfe.

grüsse


----------

