-->
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.  [ 3 posts ] 
Author Message
 Post subject: NamedQuery und custom Type mit JPA
PostPosted: Mon Apr 18, 2011 12:16 pm 
Newbie

Joined: Mon Apr 18, 2011 11:58 am
Posts: 3
Hallo,

ich habe eine Entität in welcher ich ein Feld "startTime" benutzt. Dieses Feld ist von einem eigenen Datentyp Time. Damit Hibernate das versteht wird das Feld bzw. sein getter mit der folgenden Annotation versehen:

Code:
@Type(type = "de.abc.def.PersistentTime")


Die Klasse PersistentTime implementiert org.hibernate.usertype.UserType und dient zum Mapping zwischen meinem Time und java.sql.Date in der Datenbank.

Das funktioniert auch soweit ganz gut, solange ich keine named queries verwende:

Code:
@NamedQueries({
    @NamedQuery(name = "test.abc.query", query = "SELECT tab FROM Table tab"
            + "WHERE tab.startTime > :startTime") })


Hier kann JPA das Mapping leider nicht auflösen und ich bekomme eine Exception:

Code:
java.lang.IllegalArgumentException: Parameter value [de.abc.def.time.Time@5c97bbb1] was not matching type [java.sql.Date]


Hat jemand eine Idee, wie ich JPA dazu bringen kann das Mapping auch hier durchzuführen? Vielleicht gibt es eine Möglichkeit das Mapping global zu machen? Über jeden Tipp wär ich echt dankbar!


Top
 Profile  
 
 Post subject: Re: NamedQuery und custom Type mit JPA
PostPosted: Tue Apr 19, 2011 12:16 pm 
Newbie

Joined: Tue Sep 14, 2010 4:29 pm
Posts: 16
Hallo Cathamenia,

Ich hätte zwei Ideen, bei der ersten weiß ich, dass sie funktioniert. Die zweite wäre es zumindest mal Wert, ausprobiert zu werden.
  • Benutze in der Entity ein einfaches java.util.Date, statt einer Eigenimplementierung und mappe dieses mit der Annotation @Temporal. Rein aus Datenspeicherungssicht gibt es keinen Grund für Eigenimplementierte Typen, um Datums zu speichern. Alles, was Dein PersistentTime kann, müsstest Du dann in Utility-Klassen auslagern, die mit java.util.Date arbeiten.
  • Versuche in der WHERE-Klausel ein Property Deines PersistentTime zu vergleichen, statt des ganzen Objekts. Ungefähr so: "WHERE tab.startTime.deinTimeProp > :propertyWertAusParameter"

Gruß ngomo

_________________
http://www.winfonet.eu


Top
 Profile  
 
 Post subject: Re: NamedQuery und custom Type mit JPA
PostPosted: Thu Apr 21, 2011 5:04 am 
Newbie

Joined: Mon Apr 18, 2011 11:58 am
Posts: 3
Hi,

dass ich in der Anwendung java.util.Date nicht verwende hat seinen Grund. Deshalb ist deine erste Option leider keine Option für mich.

Deinen zweiten Vorschlag kann ich leider nicht ganz nachvollziehen. Ich weiß auch nicht, ob du das richtig verstanden hast. PersistentTime ist nicht das Objekt, das in der Entität verwendet wird, sondern beinhaltet das Mapping zwischen meinem Objekt Time und der Datenbank. Deshalb ist auch der Getter für das Feld vom Typ Time mit der Annotation Type versehen.

Es scheint mir so, als würde es leider keine Möglichkeit geben, dass das Mapping, was für die Felder in meiner Entität funktioniert, auch für Queries Anwendung finden. Hier wird schlechtweg garnix gemacht. Es wird versucht den Parameter zu setzen und wenn der nicht exakt vom gleichen Typ wie das korrespondierende Feld in der DB ist, bekomme ich eine IllegalArgumentException.


Top
 Profile  
 
Display posts from previous:  Sort by  
Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 3 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.