„3. Perzisztencia (2012)” változatai közötti eltérés

Nagy Marcell (vitalap | szerkesztései)
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===
<pre>
<syntaxhighlight lang="java">
class SerializableClass implements java.io.Serializable
class SerializableClass implements java.io.Serializable


22. sor: 22. sor:
...
...
}
}
</pre>  
</syntaxhighlight>  
===Visszaállítás===
===Visszaállítás===
<pre>
<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) { ... }
</pre>  
</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)
[[Fájl:srl-osztalydiagram.png]]
[[File:srl-osztalydiagram.png]]


==Hibernate 3.0==
==Hibernate 3.0==
69. sor: 69. sor:
* &lt;property&gt; attribútum -&gt; oszlop
* &lt;property&gt; attribútum -&gt; oszlop
* &lt;many-to-one&gt;, &lt;one-to-one&gt;, reláció
* &lt;many-to-one&gt;, &lt;one-to-one&gt;, reláció
<pre>
<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>
</pre>  
</syntaxhighlight>  
===Kollekciók===
===Kollekciók===
* &lt;set&gt;, &lt;list&gt;, &lt;map&gt;, &lt;bag&gt;, &lt;array&gt;, &lt;&lt;p&gt;-array&gt;
* &lt;set&gt;, &lt;list&gt;, &lt;map&gt;, &lt;bag&gt;, &lt;array&gt;, &lt;&lt;p&gt;-array&gt;
* Javaban a megfelelő Collection interfészt kell használni, nem castolható
* Javaban a megfelelő Collection interfészt kell használni, nem castolható
<pre>
<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>
</pre>  
</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ő)
<pre>
<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>
</pre>  
</syntaxhighlight>  
** table-per-subclass
** table-per-subclass
<pre>
<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>
</pre>  
</syntaxhighlight>  
** table-per-concrete-class
** table-per-concrete-class
<pre>
<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>
</pre>
</syntaxhighlight>


===Objektumok kezelése===
===Objektumok kezelése===
155. sor: 155. sor:
* Query q = session.createQuery(&hellip;);
* Query q = session.createQuery(&hellip;);
* visszatérés: skalár vagy tömb
* visszatérés: skalár vagy tömb
<pre>
<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();
</pre>  
</syntaxhighlight>  
* paraméterek: név (:xname) vagy sorszám (? ? ?)
* paraméterek: név (:xname) vagy sorszám (? ? ?)
<pre>
<syntaxhighlight lang="java">
q.setString("x", "param");
q.setString("x", "param");
q.setString(1, "param1");
q.setString(1, "param1");
</pre>  
</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
[[Fájl:oo_jpa_entitas.png]]
[[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
<pre>
<syntaxhighlight lang="java">
@Entity
@Entity
public class MyClass implements Serializable {
public class MyClass implements Serializable {
223. sor: 223. sor:
       </attributes>
       </attributes>
</entity>
</entity>
</pre>
</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 = )
<pre>
<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();
</pre>
</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
<pre>
<syntaxhighlight lang="java">
@Entity
@Entity
@NamedQuery(name = "carByplate", query = "SELECT c FROM Car c WHERE c.plate = :rsz")
@NamedQuery(name = "carByPlate", query = "SELECT c FROM Car c WHERE c.plate = :rsz")




Car c = (Car) em.createNamedQuery("carBypalte").setParameter("rsz", plate).getSingleResult();
Car c = (Car) em.createNamedQuery("carByPlate").setParameter("rsz", plate).getSingleResult();
</pre>
</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
<pre>
<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();
</pre>
</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
<pre>
<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();
</pre>
</syntaxhighlight>


* Criteria Query (Hibernate), Builder minta szerint futás közben
* Criteria Query (Hibernate), Builder minta szerint futás közben
<pre>
<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();
</pre>
</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
<pre>
<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()
</pre>
</syntaxhighlight>
* szálak kapcsolódása és lecsatolása
* szálak kapcsolódása és lecsatolása
<pre>
<syntaxhighlight lang="java">
public void join()
public void join()
public static void leave()
public static void leave()
</pre>
</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
<pre>
<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)
</pre>
</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
<pre>
<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)
</pre>
</syntaxhighlight>
[[Fájl:os-tranzakciok.png]]
[[File:os-tranzakciok.png]]


===Objektumok===
===Objektumok===
* perzisztenciához az objektumok root-tá tesszük
* perzisztenciához az objektumok root-tá tesszük
<pre>
<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");
</pre>  
</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)
<pre>
<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
</pre>
</syntaxhighlight>


===Példa===
===Példa===
<pre>
<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);
}
}
</pre>
</syntaxhighlight>


-- [[MeszegetoBalazsIstvan|MeszegetoBalazsIstvan]] - 2008.05.27.
-- [[MeszegetoBalazsIstvan|MeszegetoBalazsIstvan]] - 2008.05.27.
A lap eredeti címe: „https://vik.wiki/3._Perzisztencia_(2012)