Multiple writable mappings in Java Persistence API

26 11 2008

Seit kurzem setzte ich mich mit der Java Persistence API auseinander, das mit Hibernate und dem von uns eingesetzten Oracle Toplink implementiert wurde.

Folgende Fehlermeldung beschäftigte mich bei einer OneToMany-Relation

Multiple writable mappings exist for the field [tabltenname.spaltenname]. Only one may be defined as writable, all others must be specified read-only.

Die Lösung war das explizite deklarieren der Spalte als „read only“, was man mit den Optionen nullable=false, insertable=false und updatable=false bei der @Column-Annotation erreicht.

Spannend, nicht? ;)

java-coffee-cup-300x219





oracle update mit inner join

25 08 2008

wieder mal ein kleines howto, für etwas, das mir wieder mal auf die schnelle nicht eingefallen ist.

wenn man in einer tabelle A alle spalten a auf einen bestimmten wert setzen möchte, die eine bestimmte bedingung (A.b = B.b) mit einer anderen tabelle B erfüllen, geht das in oracle so:

UPDATE A
set A.a =
(SELECT B.a
FROM B
WHERE A.b = B.b)

in access würde es so gehen:

update A inner join B on
A.b = B.b
SET A.a = B.a

in SQL server so:
UPDATE A
SET A.a = B.a
INNER JOIN B
ON A.b = B.b

siehe z.b. auch sql-tutorial





XSQL treibt mich in den wahnsinn

16 07 2008

mal wieder was aus meinem spannenden alltag als software-entwickler:

Oracle XSQL Servlet gibt so nette fehlermeldungen aus wie „Ungültiger Spaltenindex„, die aber irgendwie nicht direkt mit dem Index, der Anzahl oder Reihenfolge der Spalten des SQL statements oder ähnlichem zu tun hatte…

die lösung des problems war aber bald geklärt, da ich mit hilfe eines lieben arbeitskollegen erkannte, dass die anzahl der bind-params nicht mit der anzahl der verwendeten params übereinstimmt.

in xsql müssen alle params, die mit dem <xsql:query .. />-tag bind-params übergeben werden verwendet werden. diese können mit einem fragezeichen ? oder direkt mit dem prefix „:“ angesprochen werden, aber nicht zu wenige, keine doppelten verwendungen und nicht zu viele… eben genau richtig passend muss es sein. das ist die banale lösung.

.

wieso können programmierer dieser tools nicht vernünftige fehlermeldungen ausgeben? sowas wie „Anzahl der bind-params stimmt nicht mit der Anzahl der verwendeten Params überein“. da wär ich und wahrscheinlich alle xsql progger sehr glücklich. ein anderes beispiel für grauenhafte fehlermeldungen sind die gute, alte NullPointerException in Java oder „undefined is not a function“ in helma ;)

.

nachtrag: die selbe lösung gibt es auch bei dr fehlermeldung „fehlender IN- oder OUT-Parameter auf Index:: i„. hier wird ein parameter, der mit bind-params gesetzt wird, öfter im SQL verwendet, als er definiert wurde. die lösung: den parameter sooft in bind-params übergeben, wie er verwendet wird!





escape character & (ampersand) in oracle

3 06 2008

SQL-editors prompt for variables prefixed with ‘&’ in SQL statements

disable ampersand (kaufmännisches und) ‘&’ with „set define off“ in TOAD or SQL*Plus

e.g.

set define off;
insert into PERSON(ID, NAME) values (1, ‘you & me’);
set define on;

use „execute as script“ instead of „execute statement“





oracle sql snippet of the day

14 04 2008

wie erhält man schnell, und zwar besonders schnell in oracle eine tabelle mit x (test-)datensätzen?

create table test_table

as

select

level as id,

‘name ‘ || level as name

from dual

connect by level <= x

erzeugt mit x = 1 mio in weniger als 4 sec eine tabelle mit folgenden datensätzen:

1, ‘name 1′

2, ‘name 2′

3, ‘name 3′








Follow

Get every new post delivered to your Inbox.