„3. Perzisztencia (2012)” változatai közötti eltérés
a →Öröklés |
a autoedit v2: fájlhivatkozások egységesítése, az új közvetlenül az adott fájlra mutat |
||
| (3 közbenső módosítás, amit 3 másik szerkesztő végzett, nincs mutatva) | |||
| 10. sor: | 10. sor: | ||
* Leszármazottak szerializálás-lánca megszakítható a read/writeObject-ben NotSerializableException dobásával | * Leszármazottak szerializálás-lánca megszakítható a read/writeObject-ben NotSerializableException dobásával | ||
===Kimentés=== | ===Kimentés=== | ||
< | <syntaxhighlight lang="java"> | ||
class SerializableClass implements java.io.Serializable | class SerializableClass implements java.io.Serializable | ||
| 22. sor: | 22. sor: | ||
... | ... | ||
} | } | ||
</ | </syntaxhighlight> | ||
===Visszaállítás=== | ===Visszaállítás=== | ||
< | <syntaxhighlight lang="java"> | ||
try { | try { | ||
FileInputStream f = new FileInputStream("filename"); | FileInputStream f = new FileInputStream("filename"); | ||
| 33. sor: | 33. sor: | ||
catch(IOException ex) { ... } | catch(IOException ex) { ... } | ||
catch(ClassNotFoundException ex) { ... } | catch(ClassNotFoundException ex) { ... } | ||
</ | </syntaxhighlight> | ||
===ObjectOutput interfész=== | ===ObjectOutput interfész=== | ||
* mindenre throws IOException | * mindenre throws IOException | ||
| 56. sor: | 56. sor: | ||
* writeExternal(ObjectOutput out) | * writeExternal(ObjectOutput out) | ||
* readExternal(ObjectInput in) | * readExternal(ObjectInput in) | ||
[[ | [[File:srl-osztalydiagram.png]] | ||
==Hibernate 3.0== | ==Hibernate 3.0== | ||
| 69. sor: | 69. sor: | ||
* <property> attribútum -> oszlop | * <property> attribútum -> oszlop | ||
* <many-to-one>, <one-to-one>, reláció | * <many-to-one>, <one-to-one>, reláció | ||
< | <syntaxhighlight lang="xml"> | ||
<hibernate-mapping> | <hibernate-mapping> | ||
<class name="auto.Person" table="PERSON"> | <class name="auto.Person" table="PERSON"> | ||
| 89. sor: | 89. sor: | ||
</class> | </class> | ||
</hibernate-mapping> | </hibernate-mapping> | ||
</ | </syntaxhighlight> | ||
===Kollekciók=== | ===Kollekciók=== | ||
* <set>, <list>, <map>, <bag>, <array>, <<p>-array> | * <set>, <list>, <map>, <bag>, <array>, <<p>-array> | ||
* Javaban a megfelelő Collection interfészt kell használni, nem castolható | * Javaban a megfelelő Collection interfészt kell használni, nem castolható | ||
< | <syntaxhighlight lang="xml"> | ||
<class name="Product"> | <class name="Product"> | ||
<id name="serialNumber" column="SN"/> | <id name="serialNumber" column="SN"/> | ||
| 101. sor: | 101. sor: | ||
</set> | </set> | ||
</class> | </class> | ||
</ | </syntaxhighlight> | ||
===Asszociáció=== | ===Asszociáció=== | ||
* kapcsolótáblával (join table) vagy anélkül | * kapcsolótáblával (join table) vagy anélkül | ||
| 109. sor: | 109. sor: | ||
* Támogatott: | * Támogatott: | ||
** table-per-class-hierarchy (minden egy táblában, discriminator: típusjelölő) | ** table-per-class-hierarchy (minden egy táblában, discriminator: típusjelölő) | ||
< | <syntaxhighlight lang="xml"> | ||
<class ...> | <class ...> | ||
<discriminator column="PAYMENT_TYPE" type="string"/> | <discriminator column="PAYMENT_TYPE" type="string"/> | ||
| 117. sor: | 117. sor: | ||
</subclass> | </subclass> | ||
</class> | </class> | ||
</ | </syntaxhighlight> | ||
** table-per-subclass | ** table-per-subclass | ||
< | <syntaxhighlight lang="xml"> | ||
<class ...> | <class ...> | ||
<joined-subclass name="CredCPayment" table="CREDIT_PAYMENT"> | <joined-subclass name="CredCPayment" table="CREDIT_PAYMENT"> | ||
| 127. sor: | 127. sor: | ||
</joined-subclass> | </joined-subclass> | ||
</class> | </class> | ||
</ | </syntaxhighlight> | ||
** table-per-concrete-class | ** table-per-concrete-class | ||
< | <syntaxhighlight lang="xml"> | ||
<class ...> | <class ...> | ||
<union-subclass name="CredCPayment" table="CREDIT_PAYMENT"> | <union-subclass name="CredCPayment" table="CREDIT_PAYMENT"> | ||
| 136. sor: | 136. sor: | ||
</union-subclass> | </union-subclass> | ||
</class> | </class> | ||
</ | </syntaxhighlight> | ||
===Objektumok kezelése=== | ===Objektumok kezelése=== | ||
| 155. sor: | 155. sor: | ||
* Query q = session.createQuery(…); | * Query q = session.createQuery(…); | ||
* visszatérés: skalár vagy tömb | * visszatérés: skalár vagy tömb | ||
< | <syntaxhighlight lang="java"> | ||
X x = (X)session.createQuery(..).uniqueResult(); | X x = (X)session.createQuery(..).uniqueResult(); | ||
List l = session.createQuery(..).list(); | List l = session.createQuery(..).list(); | ||
Iterator i = session.createQuery(..).iterate(); | Iterator i = session.createQuery(..).iterate(); | ||
</ | </syntaxhighlight> | ||
* paraméterek: név (:xname) vagy sorszám (? ? ?) | * paraméterek: név (:xname) vagy sorszám (? ? ?) | ||
< | <syntaxhighlight lang="java"> | ||
q.setString("x", "param"); | q.setString("x", "param"); | ||
q.setString(1, "param1"); | q.setString(1, "param1"); | ||
</ | </syntaxhighlight> | ||
===HQL=== | ===HQL=== | ||
* From | * From | ||
| 190. sor: | 190. sor: | ||
* örökölhet entitástól vagy POJO-tól, POJO örökölhet entitástól | * örökölhet entitástól vagy POJO-tól, POJO örökölhet entitástól | ||
* konténeren kívül is használhatóak | * konténeren kívül is használhatóak | ||
[[ | [[File:oo_jpa_entitas.png]] | ||
==== Perzisztens elemek ==== | ==== Perzisztens elemek ==== | ||
| 210. sor: | 210. sor: | ||
* Entity Manager egyéb müveletei: find, getReference, flush, clear, Query | * Entity Manager egyéb müveletei: find, getReference, flush, clear, Query | ||
* tranzitivitas: reláció paramétere, cascase = (müveletek) + ALL | * tranzitivitas: reláció paramétere, cascase = (müveletek) + ALL | ||
< | <syntaxhighlight lang="java"> | ||
@Entity | @Entity | ||
public class MyClass implements Serializable { | public class MyClass implements Serializable { | ||
| 223. sor: | 223. sor: | ||
</attributes> | </attributes> | ||
</entity> | </entity> | ||
</ | </syntaxhighlight> | ||
=== Relációk === | === Relációk === | ||
| 229. sor: | 229. sor: | ||
* Annotációs: @OneToOne, @OneToMany, @ManyToOne, @ManyToMany | * Annotációs: @OneToOne, @OneToMany, @ManyToOne, @ManyToMany | ||
* egy- és kétirányú, kétirányúnál tulajdonos oldal - idegen kulcs, inverz oldal - referencia (mappedBy = ) | * egy- és kétirányú, kétirányúnál tulajdonos oldal - idegen kulcs, inverz oldal - referencia (mappedBy = ) | ||
< | <syntaxhighlight lang="java"> | ||
@Entity | @Entity | ||
public class Car implements Serializable { | public class Car implements Serializable { | ||
| 240. sor: | 240. sor: | ||
@OneToMany(mappedBy = "owner") | @OneToMany(mappedBy = "owner") | ||
private Collection<Car> cars = new HastSet(); | private Collection<Car> cars = new HastSet(); | ||
</ | </syntaxhighlight> | ||
==== Öröklés ==== | ==== Öröklés ==== | ||
| 248. sor: | 248. sor: | ||
* JPQL (Java Persistence Query Language) | * JPQL (Java Persistence Query Language) | ||
* Statikus lekérdezések: @NamedQuery, @NamedNativeQuery | * Statikus lekérdezések: @NamedQuery, @NamedNativeQuery | ||
< | <syntaxhighlight lang="java"> | ||
@Entity | @Entity | ||
@NamedQuery(name = " | @NamedQuery(name = "carByPlate", query = "SELECT c FROM Car c WHERE c.plate = :rsz") | ||
Car c = (Car) em.createNamedQuery(" | Car c = (Car) em.createNamedQuery("carByPlate").setParameter("rsz", plate).getSingleResult(); | ||
</ | </syntaxhighlight> | ||
* Dinamikus lekérdezések: runtime string komponálás, paraméterezéssel | * Dinamikus lekérdezések: runtime string komponálás, paraméterezéssel | ||
< | <syntaxhighlight lang="java"> | ||
Query query = em.createQuery("SELECT p FROM Product p WHERE p.param2 < :threshold ORDER BY p.param1 ascending"); | Query query = em.createQuery("SELECT p FROM Product p WHERE p.param2 < :threshold ORDER BY p.param1 ascending"); | ||
query.setParamater("threshold", my_threshold); | query.setParamater("threshold", my_threshold); | ||
List results = query.getResultList(); | List results = query.getResultList(); | ||
</ | </syntaxhighlight> | ||
* Natív SQL lekérdés a konkrét DB nyelve szerint, számozott paraméterezéssel | * Natív SQL lekérdés a konkrét DB nyelve szerint, számozott paraméterezéssel | ||
< | <syntaxhighlight lang="java"> | ||
Query query = em.createNativeQuery("SELECT * FROM Product p WHERE p.param2 < ?1"); | Query query = em.createNativeQuery("SELECT * FROM Product p WHERE p.param2 < ?1"); | ||
query.setParameter(1, my_threshold).setMaxResults(10); | query.setParameter(1, my_threshold).setMaxResults(10); | ||
List results = query.getResultList(); | List results = query.getResultList(); | ||
</ | </syntaxhighlight> | ||
* Criteria Query (Hibernate), Builder minta szerint futás közben | * Criteria Query (Hibernate), Builder minta szerint futás közben | ||
< | <syntaxhighlight lang="java"> | ||
CriteriaQuery cq1 = em.getCriteriaBuilder().createQuery(); | CriteriaQuery cq1 = em.getCriteriaBuilder().createQuery(); | ||
cq1.select(cg1.from(Person.class)); | cq1.select(cg1.from(Person.class)); | ||
Iterator iter = ((List<Person>) em.createQuery(cq1).getResultList()).iterator(); | Iterator iter = ((List<Person>) em.createQuery(cq1).getResultList()).iterator(); | ||
</ | </syntaxhighlight> | ||
==PSEPro (ObjectStore)== | ==PSEPro (ObjectStore)== | ||
| 293. sor: | 293. sor: | ||
* session public static Session create(String host, Properties props) | * session public static Session create(String host, Properties props) | ||
* session létrehozása és törlése | * session létrehozása és törlése | ||
< | <syntaxhighlight lang="java"> | ||
public static Session create(String host, Properties props) | public static Session create(String host, Properties props) | ||
public boolean isActive() | public boolean isActive() | ||
public void terminate() | public void terminate() | ||
</ | </syntaxhighlight> | ||
* szálak kapcsolódása és lecsatolása | * szálak kapcsolódása és lecsatolása | ||
< | <syntaxhighlight lang="java"> | ||
public void join() | public void join() | ||
public static void leave() | public static void leave() | ||
</ | </syntaxhighlight> | ||
===Adatbázisok=== | ===Adatbázisok=== | ||
* adatbázis létrehozás, megnyitás, bezárás | * adatbázis létrehozás, megnyitás, bezárás | ||
< | <syntaxhighlight lang="java"> | ||
public static Database create(String name, int fileMod) | public static Database create(String name, int fileMod) | ||
public static Database open(String name, int openMode) | public static Database open(String name, int openMode) | ||
public void close(boolean RetainAsTransient) | public void close(boolean RetainAsTransient) | ||
</ | </syntaxhighlight> | ||
===Tranzakciók=== | ===Tranzakciók=== | ||
* egyszerre egy sessionhöz kapcsolódhat | * egyszerre egy sessionhöz kapcsolódhat | ||
* kiadhat read-lockot és update-lockot is | * kiadhat read-lockot és update-lockot is | ||
< | <syntaxhighlight lang="java"> | ||
public static Transaction begin(int type) | public static Transaction begin(int type) | ||
public void commit(int retain) | public void commit(int retain) | ||
public void abort(int retain) | public void abort(int retain) | ||
</ | </syntaxhighlight> | ||
[[ | [[File:os-tranzakciok.png]] | ||
===Objektumok=== | ===Objektumok=== | ||
* perzisztenciához az objektumok root-tá tesszük | * perzisztenciához az objektumok root-tá tesszük | ||
< | <syntaxhighlight lang="java"> | ||
db.createRoot("foo", new Integer(5)); | db.createRoot("foo", new Integer(5)); | ||
int x = (int)db.getRoot("foo"); | int x = (int)db.getRoot("foo"); | ||
db.setRoot("foo", null); | db.setRoot("foo", null); | ||
db.destroyRoot("foo"); | db.destroyRoot("foo"); | ||
</ | </syntaxhighlight> | ||
* minden kollekciónak megvan a maga OS... megfelelője | * minden kollekciónak megvan a maga OS... megfelelője | ||
===Query=== | ===Query=== | ||
* paraméteres lekérdezés (fv opcionális) | * paraméteres lekérdezés (fv opcionális) | ||
< | <syntaxhighlight lang="java"> | ||
FreeVariables fv = new FreeVariables(); | FreeVariables fv = new FreeVariables(); | ||
fv.put("IS", Integer.TYPE); | fv.put("IS", Integer.TYPE); | ||
| 341. sor: | 341. sor: | ||
Set result1 = q.select(employees, fvb); // több eredmény | Set result1 = q.select(employees, fvb); // több eredmény | ||
Object result2 = q.pick(employees, fvb); // egyetlen eredmény | Object result2 = q.pick(employees, fvb); // egyetlen eredmény | ||
</ | </syntaxhighlight> | ||
===Példa=== | ===Példa=== | ||
< | <syntaxhighlight lang="java"> | ||
private String dbName = "cardb.odb"; | private String dbName = "cardb.odb"; | ||
private Session session; | private Session session; | ||
| 369. sor: | 369. sor: | ||
tr.commit(ObjectStore.RETAIN_HOLLOW); | tr.commit(ObjectStore.RETAIN_HOLLOW); | ||
} | } | ||
</ | </syntaxhighlight> | ||
-- [[MeszegetoBalazsIstvan|MeszegetoBalazsIstvan]] - 2008.05.27. | -- [[MeszegetoBalazsIstvan|MeszegetoBalazsIstvan]] - 2008.05.27. | ||