Ahoj,
odpovídám na zprávu z pondělka, 18. září 2006,
kterou Martin Krajci napsal(a) v 9:42:04:
Spring je webový framework, ne? Píšu desktopovou aplikaci.
Jinak používat pro autoincrement speciální tabulku nechci, když to
databáze umí sama. U MySQL ten TopLink nepodporuje ani cizí klíče,
hibernate ano, má celkem myslím 3 různé dialekty dle verze a typu
MySQL. Známý říkal, že z Derby ten Toplink spolupracuje dobře. Ono jde
asi o to, že nelze očekávat skvělou podporu cizích DB, když Oracle
mají svou vlastní. Podle mě je to spíše reklamní tah, tak jako třeba
Windows zdarma do škol a pro studenty.
Zkoušel jsem ProGuard, který umí z několika Jarů udělat jeden s tím,
že se vyhází, co není potřeba, ale jakmile se tam používá nějaká
reflexe, tak jsem v koncích. Ale nějak to řešit musím. Mám už v
aplikaci přes 40 jarů knihoven a zdá se mi to moc velké :-(
Persistance.xml mám standardní, tak jak jej generuje Netbeans IDE, jen
pro hibenrate jsem přidal:
<property name="hibernate.dialect" value="org.hibernate.dialect.HSQLDialect"/>
<property name="hibernate.show_sql" value="true"/>
a pro Toplink:
<property name="toplink.platform.class.name"
value="oracle.toplink.essentials.platform.database.HSQLPlatform"/>
<property name="toplink.logging.level" value="INFO"/>
Generovat DB hibernate taky umí, ale zatím se toho nějak bojím, že to
nebude dle mých představ a zůstávám u toho, že se DB vygeneruje pomoci
mnou dodaných SQL scriptů.
--------------------------- Původní zpráva ---------------------------
Odesilatel: Martin Krajci <[EMAIL PROTECTED]>
Předmět: JPA a autoincrement
Datum: 18. září 2006, 09:42:04 (GMT +0200)
Přílohy: <none>
msgid:[EMAIL PROTECTED]
M> Dobry den,
M> Tiez sa mi na Hibernate nepacilo mnozstovo jar-ov ale velkostou su
M> porovnatelne s Toplinkom (3,5 MB vs 2,2 MB).
M> Ja som pouzil na perzistenciu Spring 2.0 + Hibernate / Toplink + HSQL /
M> MySQL a s autoincrementom som nemal problemy pri ani jednej kombinacii.
M> ID vyzeralo takto:
M> @Entity
M> public class Employee {
M>
M> @Id
M> @GeneratedValue(strategy = GenerationType.TABLE)
M> private long id;
M> ...
M> GenerationType.TABLE - je portable nad vsetkymi databazami.
M> Pre vas nezaujimavy Spring config takto:
M> <bean
M> class="org.springframework.orm.jpa.vendor.TopLinkJpaVendorAdapter">
M> <!-- <bean
M> class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"> -->
M> <property name="showSql" value="true"/>
M> <property name="generateDdl" value="true"/>
M>
M> <property name="databasePlatform"
M> value="oracle.toplink.essentials.platform.database.HSQLPlatform"/>
M> </bean>
M> Zaujimava je ale ta properta 'generateDdl' ktora ak 'true' tak
M> vygeneruje DB schemu nanovo. Ak nepouzivate Spring tak to spravi java2db.
M> Pisem to preto lebo mozno je chyba niekde v scheme kedze chcete pouzivat
M> Identity a vasa exception
M> 'Exception Description: SEQ_GEN_SEQUENCE ...'
M> vravi ze sa robi nieco so Sequence.
M> Takze by som pouzil GenerationType.TABLE a schemu si pregeneroval
M> nanovo. JPA je pomerne nova, takze by som sa uistil ze mam najnovsi
M> toplink-essentials.jar a tiez HSQL driver (hsqldb.jar) - mozno niesu u
M> vas kompatibilne.
M> Ja by som tomu Toplinku sancu dal :-)
M> Inac ako vyzara vas persistence.xml?
M> Martin Krajci
M> Tomáš Procházka wrote:
>> Ahoj,
>> odpovídám na zprávu z neděle, 17. září 2006,
>> kterou Petr Schreib napsal(a) v 13:38:41:
>>
>> Hibernate funguje dle očekávání, TopLink bude nejspíše k ničemu,
>> ostatně mám podobné zkušenosti se vším od Oraclu. Jen mě vadí, že
>> Hibernate je 3x větší a je to hromada jarů, kdo se v tom pak má
>> orientovat.
>>
>> --------------------------- Původní zpráva ---------------------------
>> Odesilatel: Petr Schreib <[EMAIL PROTECTED]>
>> Předmět: JPA a autoincrement
>> Datum: 17. září 2006, 13:38:41 (GMT +0200)
>> Přílohy: <none>
>> msgid:[EMAIL PROTECTED]
>>
>> P> Zkuste přidat k @Id ještě anotaci @GeneratedValue(strategy =
>> P> GenerationType.IDENTITY). Pokud autoincrementaci zajišťuje přímo
>> P> databáze, mělo by to stačit.
>>
>> P> Petr
>>
>> P> On 9/17/06, Tomáš Procházka <[EMAIL PROTECTED]> wrote:
>>
>>>> Ahoj.
>>>>
>>>> Nevíte někdo, zda jde Java Persistance API donutit, aby používalo
>>>> autoincrementaci primárního klíče? Respektive to umí databáze sama,
>>>> problém, je že když provedu:
>>>>
>>>> EntityManager em = DataConn.getEM();
>>>> em.getTransaction().begin();
>>>>
>>>> Customers cust = new Customers();
>>>> cust.setType((short)0);
>>>> cust.setFirstname("Tomáš");
>>>> cust.setLastname("Procházka");
>>>> cust.setRc("811019/5148");
>>>>
>>>> em.persist(cust);
>>>> em.getTransaction().commit();
>>>>
>>>>
>>>> Tak TopLink vygeneruje:
>>>>
>>>> INSERT INTO CUSTOMERS (ID, TITLE, STREE, TYPE, CITY, DIC, ZIP, BNAME,
>>>> STATE, LASTNAME, PHONE, ICO, EMAIL, FIRSTNAME, OPNUM, RC, DATE_CREATE)
>>>> VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
>>>>
>>>> A já bych se potřeboval zbavit toho ID, co se tam snaží vnutit.
>>>>
>>>> Zkoušel jsem:
>>>>
>>>> @Id
>>>> @Column(name = "ID", nullable = false,insertable = false,unique=true)
>>>> private Integer id;
>>>>
>>>>
>>>> v definici entity a nepomohlo to :-(
>>>>
>>>>
>>>>
>>>> Datum: 11:44:06 17. září 2006
>>>> --
>>>> ---------------------------------------------------------------------
>>>> TomášProcházka
>>>>
>>>>
>>>> E-mail: [EMAIL PROTECTED]
>>>> WWW: http://atom.sf.cz
>>>> ICQ: 87147320
>>>> ---------------------------------------------------------------------
>>>>
>>>>
>>>>
>>
>> ------------------------ Konec původní zprávy ------------------------
>>
>>
M> ______________________________________________________________________
M> This email has been scanned by the MessageLabs Email Security System.
M> For more information please visit http://www.messagelabs.com/email
M> ______________________________________________________________________
------------------------ Konec původní zprávy ------------------------
--
---------------------------------------------------------------------
Tomáš Procházka
E-mail: [EMAIL PROTECTED]
WWW: http://atom.sf.cz
ICQ: 87147320
---------------------------------------------------------------------