-->
These old forums are deprecated now and set to read-only. We are waiting for you on our new forums!
More modern, Discourse-based and with GitHub/Google/Twitter authentication built-in.

All times are UTC - 5 hours [ DST ]



Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 9 posts ] 
Author Message
 Post subject: createQuery INSERT INTO klappt nicht
PostPosted: Thu Nov 29, 2007 6:47 pm 
Newbie

Joined: Thu Nov 29, 2007 6:26 pm
Posts: 9
hallo zusammen,
ich verusche nun seit 3 stunden ein statement vorzubereiten aber ich bekomme immer den fehler:

org.hibernate.hql.ast.QuerySyntaxException: unexpected token:

im source steht folgendes:
hibernateSession = sessionFactory.openSession();
Query q = hibernateSession.createQuery("insert into Daten (userID,userSession) values (?,?)");
q.setString(0, "test");
q.setString(1, "test2");
q.executeUpdate();

die table sessions wird auf die java klasse Daten abgbildet, ist doch richtig dass ich die klasse aus der mapping-file angebe und nicht direkt die table,oder?

ich bin am verzweifeln!


Top
 Profile  
 
 Post subject:
PostPosted: Mon Dec 03, 2007 9:38 am 
Newbie

Joined: Thu Aug 02, 2007 10:20 am
Posts: 3
Dazu hab ich einen Satz in der Hibernate Referenz gefunden, der dein Problem wahrscheinlich klärt:
"Only the INSERT INTO ... SELECT ... form is supported; not the INSERT INTO ... VALUES ... form."

Zu finden auf Seite 143 zu Hibernate 3.2.1 im Kapitel zu Batch-Processing.

Warum für sowas überhaupt HQL benutzen, ist doch viel zu umständlich.

gruß
Karola


Top
 Profile  
 
 Post subject:
PostPosted: Mon Dec 10, 2007 9:33 am 
Newbie

Joined: Thu Nov 29, 2007 6:26 pm
Posts: 9
super danke!


Top
 Profile  
 
 Post subject:
PostPosted: Mon Dec 10, 2007 11:39 am 
Newbie

Joined: Thu Nov 29, 2007 6:26 pm
Posts: 9
oh man ich schaffe kein normales insert,
habe folgende anfrage:

Query query = hibernateSession.createSQLQuery("INSERT INTO Benutzer (server_benutzername, server_passwort, server_ip, benutzerrolle) VALUES (:name,:pwd,:ip,:role)").addEntity(Benutzer.class);

query.setString("name", benutzer.getserver_benutzername());
query.setString("pwd", benutzer.getserver_passwort());
query.setString("ip", benutzer.getserver_ip());
query.setString("role", benutzer.getbenutzerrolle());

try
{
query.list();
}
catch(Exception e)
{
e.printStackTrace();
}

ich bekomme immer einen fehler:
Hibernate: INSERT INTO Benutzer (server_benutzername, server_passwort, server_ip, benutzerrolle) VALUES (?,?,?,?)
org.hibernate.exception.GenericJDBCException: could not execute query

hat jemand eine idee?


Top
 Profile  
 
 Post subject:
PostPosted: Tue Dec 18, 2007 5:57 am 
Newbie

Joined: Wed Dec 12, 2007 4:28 am
Posts: 3
Hibernate ist ein objektrelationales Mapping und Querytool, d.h man will Objekte auf relationale Datenbanken abbilden und nicht primär SQL-Statements damit absetzen. Um Objecte zu speichern bieten sich die Funktionen save, persist, saveOrUpdate etc an. Dadurch werden die Objekte dem Entity-Manger, bzw. der Session als persistente Objekte bekannt. Die Verwendung des inserts ist also meist ehr ein Antipattern und man sollte eigentlich erst gar nicht darüber nachdenken ob und wie es geht. Für JPA sind Massenupdates möglich, aber auch hier gilt das gesagte. Alle diese Operationen sind bzw. wären quasi am Persistenzlayer vorbei.

MfG

Manfred


Top
 Profile  
 
 Post subject:
PostPosted: Tue Dec 18, 2007 6:25 am 
Newbie

Joined: Thu Nov 29, 2007 6:26 pm
Posts: 9
ah o.k. also erstelle ich mir erst das objekt, also z.b. ich möchte in die table person, welche aus id und name besteht, einen datensatz eintragen, dann ungefähr so?:

Person p = new Person()
p.id("1");
p.name("test");

hibernateSession.save(p);

oder anders?

grüße
robson und danke!


Top
 Profile  
 
 Post subject:
PostPosted: Tue Dec 18, 2007 9:38 am 
Newbie

Joined: Wed Dec 12, 2007 4:28 am
Posts: 3
robsonrobi wrote:
ah o.k. also erstelle ich mir erst das objekt, also z.b. ich möchte in die table person, welche aus id und name besteht, einen datensatz eintragen, dann ungefähr so?:

Person p = new Person()
p.id("1");
p.name("test");

hibernateSession.save(p);

oder anders?

grüße
robson und danke!



Genauso. man muss natürlich noch für das Mapping sorgen. Da gibt es prinzipell 2 Möglichkeiten entweder xml-files:

Nachfolgend ein Demo-Beispiel, das bei mir noch auf dem Nodebook herumlag

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="com.liantis.phone.dom">
<class name="PersonImpl"
table="Person">
<id name="id" type="long" column="id" >
<generator class="increment">
<!--generator class="native">
<param name="sequence">seq_person</param-->
</generator>

</id>
<property name="firstname" column="firstname" />
<property name="lastname" column="lastname"/>
<property name="address" column="address"/>
<property name="city" column="city"/>
<property name="zipcode" column="zipcode"/>

<!-- Person and Phones are a komposition -->
<set name="phones" cascade="all" lazy="false" >
<key column="person_id" update="false" />
<one-to-many
class="PhoneImpl" />
</set>

<query name="findPersonByName">from PersonImpl where lastname like :name </query>

<query name="deleteAllPersons">delete from PersonImpl</query>
</class>


<class name="PhoneImpl"
table="Phone">


<id name="id" type="long" column="id">
<generator class="increment">
</generator>
</id>

<property name="msisdn" column="msisdn"/>
<many-to-one name="person" class="PersonImpl" column="person_id" >
</many-to-one>
<query name="deleteAllPhones">delete from PhoneImpl</query>
</class>

</hibernate-mapping>

oder Annotations. Für Annotations habe ich kein Beispiel so direkt mit Hibernate, weil ich seit einiger Zeit nur noch JPA mit Hibernate-Entitymanager verwende :

JPA-Beispiel mit Annotations:

package com.liantis.demo.rating.dom;

import java.io.Serializable;
import java.util.HashSet;
import java.util.Set;

import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.Id;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.OneToMany;
import javax.persistence.Table;

@Entity(name="Customer")
@Table(name="customer")
@NamedQueries( { @NamedQuery(name="findAllCustomer" , query="from Customer"),
@NamedQuery(name="findCustomerByMsisdn" , query="from Customer where msisdn = :msisdn")
})
public class CustomerImpl implements Customer, Serializable {


private static final long serialVersionUID = 1L;

@Id()
private String msisdn ;

private String name ;

@OneToMany(targetEntity =RatedAmountImpl.class, mappedBy = "customer", fetch = FetchType.EAGER, cascade = CascadeType.REMOVE)

private Set<RatedAmount> ratedAmount = new HashSet<RatedAmount>();

public CustomerImpl() {

}

public CustomerImpl(String aMsisdn , String aName ) {
msisdn=aMsisdn;
name=aName;
}


public String getMsisdn() {
return msisdn;
}


public String getName() {
return name;
}

@Override
public boolean equals(Object aCustomer) {
if (aCustomer instanceof Customer) {
return msisdn.equals( ((Customer)aCustomer).getMsisdn());

}
return false;
}

@Override
public int hashCode() {
return msisdn.hashCode();
}

@Override
public String toString() {
return "msisdn="+msisdn+" ,name=" +name;
}

public Set<RatedAmount> getRatedAmount() {
return ratedAmount;
}

}


Aber bei Hibernate (ohne JPA) ist es fast 1:1 identisch.


MfG

Manfred


Top
 Profile  
 
 Post subject:
PostPosted: Tue Dec 18, 2007 9:57 am 
Newbie

Joined: Thu Nov 29, 2007 6:26 pm
Posts: 9
super, vielen dank dir und ein schönes weihnachtsfest.

grüße
robson


Top
 Profile  
 
 Post subject:
PostPosted: Tue Dec 18, 2007 10:51 am 
Newbie

Joined: Thu Nov 29, 2007 6:26 pm
Posts: 9
jetzt habe ich doch nochmal eine frage, ich besitzte insgesamt mehrere mapping dateien, woher weiss denn jetzt hibernateSession.openSession(),
bzw später das hibernateSession.save(object), um welche table es sich handelt, also um welches mapping?

gruß
robson


Top
 Profile  
 
Display posts from previous:  Sort by  
Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 9 posts ] 

All times are UTC - 5 hours [ DST ]


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum

Search for:
© Copyright 2014, Red Hat Inc. All rights reserved. JBoss and Hibernate are registered trademarks and servicemarks of Red Hat, Inc.