Hibernate############# Version: 2.1.6

Size: px
Start display at page:

Download "Hibernate############# Version: 2.1.6"

Transcription

1 Hibernate############# Version: 2.1.6

2

3

4

5

6

7 eg/ lib/ etc/hibernate.properties ant eg build eg

8

9 webapps/quickstart TOMCAT/common/lib webapps/quickstart/web-inf/lib webapps/quickstart/web-inf/classes pg73jdbc3.jar WEB-INF/lib WEB-INF/classes hibernate2.jar lib/

10 log4j.properties src/ lib/readme.txt TOMCAT/conf/server.xml <Context path="/quickstart" docbase="quickstart"> <Resource name="jdbc/quickstart" scope="shareable" type="javax.sql.datasource"/> <ResourceParams name="jdbc/quickstart"> <parameter> <name>factory</name> <value>org.apache.commons.dbcp.basicdatasourcefactory</value> </parameter> <!-- DBCP################ --> <parameter> <name>url</name> <value>jdbc:postgresql://localhost/quickstart</value> </parameter>

11 <parameter> <name>driverclassname</name><value>org.postgresql.driver</value> </parameter> <parameter> <name>username</name> <value>quickstart</value> </parameter> <parameter> <name>password</name> <value>secret</value> </parameter> <!-- DBCP################## --> <parameter> <name>maxwait</name> <value>3000</value> </parameter> <parameter> <name>maxidle</name> <value>100</value> </parameter> <parameter> <name>maxactive</name> <value>10</value> </parameter> </ResourceParams> </Context> quickstart TOMCAT/webapp/quickstart web.xml process() java:comp/env/jdbc/quickstart Connection WEB-INF/classes hibernate.cfg.xml <?xml version='1.0' encoding='utf-8'?> <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD//EN" " <hibernate-configuration> <session-factory> <property name="connection.datasource">java:comp/env/jdbc/quickstart</property> <property name="show_sql">false</property> <property name="dialect">net.sf.hibernate.dialect.postgresqldialect</property> <!-- ########## --> <mapping resource="cat.hbm.xml"/>

12 </session-factory> </hibernate-configuration> SessionFactory Configuration SessionFactory hibernate.cfg.xml Cat Cat.hbm.xml package net.sf.hibernate.examples.quickstart; public class Cat { private String id; private String name; private char sex; private float weight; public Cat() { public String getid() { return id; private void setid(string id) { this.id = id; public String getname() { return name; public void setname(string name) { this.name = name; public char getsex() { return sex;

13 public void setsex(char sex) { this.sex = sex; public float getweight() { return weight; public void setweight(float weight) { this.weight = weight; String char Date id Cat Cat.hbm.xml <?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN" " <hibernate-mapping> <class name="net.sf.hibernate.examples.quickstart.cat" table="cat"> <!-- 32 hex########## ###UUID########Hibernate######### --> <id name="id" type="string" unsaved-value="null" > <column name="cat_id" sql-type="char(32)" not-null="true"/> <generator class="uuid.hex"/> </id> <!-- cat############################# --> <property name="name"> <column name="name" length="16" not-null="true"/> </property> <property name="sex"/> <property name="weight"/>

14 </class> </hibernate-mapping> cata.getid().equals(catb.getid()) CAT CAT_ID Cat name CAT ### # ### cat_id character(32) not null name character varying(16) not null sex character(1) weight real Indexes: cat_pkey primary key btree (cat_id) Session Cat SessionFactory Session SessionFactory sessionfactory = new Configuration().configure().buildSessionFactory(); SessionFactory hibernate.cfg.xml SessionFactory Configuration SessionFactory SessionFactory

15 SessionFactory SessionFactory HibernateUtil import net.sf.hibernate.*; import net.sf.hibernate.cfg.*; public class HibernateUtil { private static Log log = LogFactory.getLog(HibernateUtil.class); private static final SessionFactory sessionfactory; static { try { // SessionFactory###### sessionfactory = new Configuration().configure().buildSessionFactory(); catch (Throwable ex) { log.error("initial SessionFactory creation failed.", ex); throw new ExceptionInInitializerError(ex); public static final ThreadLocal session = new ThreadLocal(); public static Session currentsession() throws HibernateException { Session s = (Session) session.get(); // ####Thread############Session######## if (s == null) { s = sessionfactory.opensession(); session.set(s); return s; public static void closesession() throws HibernateException { Session s = (Session) session.get(); session.set(null); if (s!= null) s.close(); SessionFactory Session ThreadLocal SessionFactory Session Session Session SessionFactory Session session = HibernateUtil.currentSession(); Transaction tx= session.begintransaction(); Cat princess = new Cat(); princess.setname("princess"); princess.setsex('f'); princess.setweight(7.4f);

16 session.save(princess); tx.commit(); HibernateUtil.closeSession(); Session Transaction HibernateUtil.currentSession(); Session Session Session Transaction tx = session.begintransaction(); Query query = session.createquery("select c from Cat as c where c.sex = :sex"); query.setcharacter("sex", 'F'); for (Iterator it = query.iterate(); it.hasnext();) { Cat cat = (Cat) it.next(); out.println("female Cat: " + cat.getname() ); tx.commit(); PreparedStatement Session

17

18 net.sf.hibernate.sessionfactory Session ConnectionProvider net.sf.hibernate.session Transaction Session Session Session Session

19 net.sf.hibernate.transaction Session Transaction net.sf.hibernate.connection.connectionprovider Datasource DriverManager net.sf.hibernate.transactionfactory Transaction Transaction TransactionFactory ConnectionProvider

20 hibernate.properties net.sf.hibernate.cfg.configuration Configuration SessionFactory Configuration Configuration cfg = new Configuration().addFile("Item.hbm.xml").addFile("Bid.hbm.xml"); getresourceasstream() Configuration cfg = new Configuration().addClass(org.hibernate.auction.Item.class).addClass(org.hibernate.auction.Bid.class); /org/hibernate/autcion/item.hbm.xml /org/hibernate/autcion/bid.hbm.xml Configuration Properties props = new Properties();... Configuration cfg = new Configuration().addClass(org.hibernate.auction.Item.class).addClass(org.hibernate.auction.Bid.class).setProperties(props); Configuration SessionFactory Configuration Session SessionFactory sessions = cfg.buildsessionfactory();

21 SessionFactory SessionFactory Session java.sql.connection conn = datasource.getconnection(); Session session = sessions.opensession(conn); // ##################### Session SessionFactory SessionFactory SessionFactory SessionFactory java.util.properties Configuration.setProperties() hibernate.properties java -Dproperty=value System hibernate.cfg.xml <property> Session Session session = sessions.opensession(); // ###Session######## // ######################JDBC################### net.sf.hibernate.cfg.environment java.sql.drivermanager hibernate.connection.driver_class hibernate.connection.url hibernate.connection.username hibernate.connection.password

22 hibernate.connection.pool_size hibernate.connection.pool_size lib hibernate.c3p0.* C3P0ConnectionProvider DBCPConnectionProvider hibernate.dbcp.* hibernate.dbcp.ps.* hibernate.proxool.* hibernate.connection.driver_class = org.postgresql.driver hibernate.connection.url = jdbc:postgresql://localhost/mydatabase hibernate.connection.username = myuser hibernate.connection.password = secret hibernate.c3p0.min_size=5 hibernate.c3p0.max_size=20 hibernate.c3p0.timeout=1800 hibernate.c3p0.max_statements=50 hibernate.dialect = net.sf.hibernate.dialect.postgresqldialect javax.sql.datasource hibernate.connection.datasource hibernate.jndi.url hibernate.jndi.class hibernate.connection.username hibernate.connection.password InitialContextFactory hibernate.connection.datasource = java:/comp/env/jdbc/mydb hibernate.transaction.factory_class = \ net.sf.hibernate.transaction.jtatransactionfactory

23 hibernate.transaction.manager_lookup_class = \ net.sf.hibernate.transaction.jbosstransactionmanagerlookup hibernate.dialect = \ net.sf.hibernate.dialect.postgresqldialect hibernate.connnection hibernate.connnection.charset charset net.sf.hibernate.connection.connectionprovider hibernate.connection.provider_class java -Dproperty=value hibernate.properties Configuration Properties hibernate.dialect Dialect full.classname.of.dialect hibernate.default_schema SCHEMA_NAME hibernate.session_factory_name SessionFactory jndi/composite/name hibernate.use_outer_join max_fetch_depth true false hibernate.max_fetch_depth 0

24 0 3 hibernate.jdbc.fetch_size hibernate.jdbc.batch_size Statement.setFetchSize() 5 30 hibernate.jdbc.batch_versioned_data executebatch() true false true false hibernate.jdbc.use_scrollable_resultset true false hibernate.jdbc.use_streams_for_binary binary serializable true false hibernate.jdbc.use_get_generated_keys PreparedStatement.getGeneratedKeys() true false hibernate.cglib.use_reflection_optimizer

25 hibernate.cfg.xml true false hibernate.jndi.<propertyname> propertyname InitialContextFactory hibernate.connection.isolation java.sql.connection 1, 2, 4, 8 hibernate.connection.<propertyname> propertyname DriverManager.getConnection() hibernate.connection.provider_class ConnectionProvider classname.of.connectionprovider hibernate.cache.provider_class CacheProvider classname.of.cacheprovider hibernate.cache.use_minimal_puts true false hibernate.cache.use_query_cache true false hibernate.cache.query_cache_factory QueryCache StandardQueryCache classname.of.querycache hibernate.cache.region_prefix prefix

26 hibernate.transaction.factory_class Transaction TransactionFactory JDBCTransactionFactory classname.of.transactionfactory jta.usertransaction UserTransaction JTATransactionFactory jndi/composite/name hibernate.transaction.manager_lookup_class TransactionManagerLookup classname.of.transactionmanagerlookup hibernate.query.substitutions hqlfunction=sqlfunc hqlliteral=sql_literal, hibernate.show_sql true false hibernate.hbm2ddl.auto SessionFactory create-drop SessionFactory update create create-drop hibernate.dialect net.sf.hibernate.dialect.dialect native sequence Session.lock() Query.setLockMode() hibernate.dialect

27 net.sf.hibernate.dialect.db2dialect net.sf.hibernate.dialect.db2400dialect net.sf.hibernate.dialect.db2390dialect net.sf.hibernate.dialect.postgresqldialect net.sf.hibernate.dialect.mysqldialect net.sf.hibernate.dialect.oracledialect net.sf.hibernate.dialect.oracle9dialect net.sf.hibernate.dialect.sybasedialect net.sf.hibernate.dialect.sybaseanywheredialect net.sf.hibernate.dialect.sqlserverdialect net.sf.hibernate.dialect.sapdbdialect net.sf.hibernate.dialect.informixdialect net.sf.hibernate.dialect.hsqldialect net.sf.hibernate.dialect.ingresdialect net.sf.hibernate.dialect.progressdialect net.sf.hibernate.dialect.mckoidialect net.sf.hibernate.dialect.interbasedialect net.sf.hibernate.dialect.pointbasedialect net.sf.hibernate.dialect.frontbasedialect net.sf.hibernate.dialect.firebirddialect SELECT outer-join hibernate.max_fetch_depth 0 1

28 auto byte binary serializable hibernate.jdbc.use_streams_for_binary CacheProvider net.sf.hibernate.cache.cacheprovider hibernate.cache.provider_class Transaction hibernate.transaction.factory_class Transaction Transaction net.sf.hibernate.transaction.jdbctransactionfactory net.sf.hibernate.transaction.jtatransactionfactory Session TransactionManager net.sf.hibernate.transaction.jbosstransactionmanagerlookup net.sf.hibernate.transaction.weblogictransactionmanagerlookup net.sf.hibernate.transaction.webspheretransactionmanagerlookup net.sf.hibernate.transaction.oriontransactionmanagerlookup

29 net.sf.hibernate.transaction.resintransactionmanagerlookup net.sf.hibernate.transaction.jotmtransactionmanagerlookup net.sf.hibernate.transaction.jonastransactionmanagerlookup net.sf.hibernate.transaction.jrun4transactionmanagerlookup net.sf.hibernate.transaction.bestransactionmanagerlookup SessionFactory SessionFactory Session SessionFactory hibernate.session_factory_name java:comp/env/hibernate/sessionfactory SessionFactory SessionFactory hibernate.jndi.url hibernate.jndi.class InitialContext SessionFactory hibernate.query.substitutions hibernate.query.substitutions true=1, false=0 true false hibernate.query.substitutions tolowercase=lower LOWER log4j.jar log4j.properties

30 src/ hibernate.show_sql NamingStrategy net.sf.hibernate.cfg.namingstrategy TBL_ Configuration.setNamingStrategy() SessionFactory sf = new Configuration().setNamingStrategy(ImprovedNamingStrategy.INSTANCE).addFile("Item.hbm.xml").addFile("Bid.hbm.xml").buildSessionFactory(); net.sf.hibernate.cfg.improvednamingstrategy net.sf.hibernate.cfg.improvednamingstrategy hibernate.cfg.xml hibernate.properties CLASSPATH <?xml version='1.0' encoding='utf-8'?> <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 2.0//EN" " <hibernate-configuration> <!-- /jndi/name#############sessionfactory###### --> <session-factory name="java:comp/env/hibernate/sessionfactory"> <!-- ##### --> <property name="connection.datasource">my/first/datasource</property> <property name="dialect">net.sf.hibernate.dialect.mysqldialect</property>

31 <property name="show_sql">false</property> <property name="use_outer_join">true</property> <property name="transaction.factory_class"> net.sf.hibernate.transaction.jtatransactionfactory </property> <property name="jta.usertransaction">java:comp/usertransaction</property> <!-- ########## --> <mapping resource="org/hibernate/auction/item.hbm.xml"/> <mapping resource="org/hibernate/auction/bid.hbm.xml"/> </session-factory> </hibernate-configuration> SessionFactory sf = new Configuration().configure().buildSessionFactory(); SessionFactory sf = new Configuration().configure("/my/package/catdb.cfg.xml").buildSessionFactory();

32 package eg; import java.util.set; import java.util.date; public class Cat { private Long id; // ### private String name; private Date birthdate; private Cat mate; private Set kittens private Color color; private char sex; private float weight; private void setid(long id) { this.id=id; public Long getid() { return id; void setname(string name) { this.name = name; public String getname() { return name; void setmate(cat mate) { this.mate = mate; public Cat getmate() { return mate; void setbirthdate(date date) { birthdate = date; public Date getbirthdate() { return birthdate; void setweight(float weight) { this.weight = weight; public float getweight() { return weight; public Color getcolor() { return color;

33 void setcolor(color color) { this.color = color; void setkittens(set kittens) { this.kittens = kittens; public Set getkittens() { return kittens; // addkitten##hibernate############ public void addkitten(cat kitten) { kittens.add(kitten); void setsex(char sex) { this.sex=sex; public char getsex() { return sex; Cat getfoo isfoo setfoo protected private Cat Constructor.newInstance() Cat id java.lang.string java.util.date Session.saveOrUpdate()

34 final Cat package eg; public class DomesticCat extends Cat { private String name; public String getname() { return name; protected void setname(string name) { this.name=name; equals() hashcode() Set equals() hashcode() Session Session a == b equals() a b Session equals() hashcode() Set Set equals() hashcode() equals()

35 public class Cat {... public boolean equals(object other) { if (this == other) return true; if (!(other instanceof Cat)) return false; final Cat cat = (Cat) other; if (!getname().equals(cat.getname())) return false; if (!getbirthday().equals(cat.getbirthday())) return false; return true; public int hashcode() { int result; result = getname().hashcode(); result = 29 * result + getbirthday().hashcode(); return result; Lifecycle Interceptor public interface Lifecycle { public boolean onsave(session s) throws CallbackException; (1) public boolean onupdate(session s) throws CallbackException; (2) public boolean ondelete(session s) throws CallbackException; (3) public void onload(session s, Serializable id); (4) (1) onsave (2) onupdate Session.update() (3) ondelete (4) onload onsave() ondelete() onupdate() onload() Session onload() onsave() onupdate() Session

36 onupdate() Session.update() onsave() onupdate() ondelete() true CallbackException onsave() public interface Validatable { public void validate() throws ValidationFailure; ValidationFailure Validatable validate() Lifecycle validate() Cat package eg; import java.util.set; import java.util.date; /** * table="cats" */ public class Cat { private Long id; // ### private Date birthdate; private Cat mate; private Set kittens private Color color; private char sex; private float weight; /** * generator-class="native"

37 * column="cat_id" */ public Long getid() { return id; private void setid(long id) { this.id=id; /** * column="mate_id" */ public Cat getmate() { return mate; void setmate(cat mate) { this.mate = mate; /** * column="birth_date" */ public Date getbirthdate() { return birthdate; void setbirthdate(date date) { birthdate = date; /** * column="weight" */ public float getweight() { return weight; void setweight(float weight) { this.weight = weight; /** * column="color" * not-null="true" */ public Color getcolor() { return color; void setcolor(color color) { this.color = color; /** * lazy="true" * order-by="birth_date" * column="parent_id" */ public Set getkittens() { return kittens; void setkittens(set kittens) { this.kittens = kittens; // addkitten##hibernate############ public void addkitten(cat kitten) { kittens.add(kitten);

38 /** * column="sex" * not-null="true" * update="false" */ public char getsex() { return sex; void setsex(char sex) { this.sex=sex;

39 <?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 2.0//EN" " <hibernate-mapping package="eg"> <class name="cat" table="cats" discriminator-value="c"> <id name="id" column="uid" type="long"> <generator class="hilo"/> </id> <discriminator column="subclass" type="character"/> <property name="birthdate" type="date"/> <property name="color" not-null="true"/> <property name="sex" not-null="true" update="false"/> <property name="weight"/> <many-to-one name="mate" column="mate_id"/> <set name="kittens"> <key column="mother_id"/> <one-to-many class="cat"/> </set> <subclass name="domesticcat" discriminator-value="d"> <property name="name" type="string"/> </subclass> </class> <class name="dog"> <!-- ###Dog########### --> </class> </hibernate-mapping> not-null hibernate-x.x.x/src/net/sf/hibernate hibernate.jar

40 schema default-cascade cascade auto-import <hibernate-mapping schema="schemaname" (1) default-cascade="none save-update" (2) auto-import="true false" (3) package="package.name" (4) /> (1) schema (2) default-cascade none (3) auto-import true (4) package auto-import="false" class <class /> name="classname" (1) table="tablename" (2) discriminator-value="discriminator_value" (3) mutable="true false" (4) schema="owner" (5) proxy="proxyinterface" (6) dynamic-update="true false" (7) dynamic-insert="true false" (8) select-before-update="true false" (9) polymorphism="implicit explicit" (10) where="arbitrary sql where condition" (11) persister="persisterclass" (12) batch-size="n" (13) optimistic-lock="none version dirty all" (14) lazy="true false" (15) (1) name (2) table (3) discriminator-value null not null (4) mutable true

41 (5) schema <hibernate-mapping> (6) proxy (7) dynamic-update false UPDATE (8) dynamic-insert false INSERT (9) select-before-update false UPDATE update() UPDATE SELECT (10) polymorphism implicit (11) where WHERE (12) persister ClassPersister (13) batch-size 1 (14) optimistic-lock version (15) lazy lazy="true" #### <subclass> eg.foo$bar mutable="false" proxy <class> <subclass> <joined-subclass> polymorphism="implicit" persister net.sf.hibernate.persister.entitypersister net.sf.hibernate.persister.classpersister

42 net.sf.hibernate.test.custompersister Hashtable dynamic-update dynamic-insert <subclass> <joined-subclass> select-before-update dynamic-update version all dirty none Session.update() unsaved-value <id> <id </id> name="propertyname" (1) type="typename" (2) column="column_name" (3) unsaved-value="any none null id_value" (4) access="field property ClassName"> (5) <generator class="generatorclass"/> (1) name (2) type (3) column (4) unsaved-value null (5) access property name

43 unsaved-value null <composite-id> <generator> <param> <id name="id" type="long" column="uid" unsaved-value="0"> <generator class="net.sf.hibernate.id.tablehilogenerator"> <param name="table">uid_table</param> <param name="column">next_hi_value_column</param> </generator> </id> net.sf.hibernate.id.identifiergenerator increment long short int identity long short int sequence long short int hilo long short int hibernate_unique_key next_hi seqhilo long short int uuid.hex uuid.string

44 native identity sequence hilo assigned save() foreign <one-to-one> hilo seqhilo <id name="id" type="long" column="cat_id"> <generator class="hilo"> <param name="table">hi_value</param> <param name="column">next_value</param> <param name="max_lo">100</param> </generator> </id> <id name="id" type="long" column="cat_id"> <generator class="seqhilo"> <param name="sequence">hi_value</param> <param name="max_lo">100</param> </generator> </id> Connection hilo uuid.string identity sequence

45 <id name="id" type="long" column="uid"> <generator class="sequence"> <param name="sequence">uid_sequence</param> </generator> </id> <id name="id" type="long" column="uid" unsaved-value="0"> <generator class="identity"/> </id> native identity sequence hilo assigned save() update() <composite-id name="propertyname" class="classname" unsaved-value="any none" access="field property ClassName"> <key-property name="propertyname" type="typename" column="column_name"/> <key-many-to-one name="propertyname class="classname" column="column_name"/>... </composite-id> <composite-id> <key-property> <key-many-to-one> <composite-id> <key-property name="medicarenumber"/> <key-property name="dependent"/> </composite-id> equals() hashcode() Serializable load()

46 name class unsaved-value none any <discriminator> string character integer byte short boolean yes_no true_false <discriminator column="discriminator_column" (1) type="discriminator_type" (2) force="true false" (3) insert="true false" (4) /> (1) column class (2) type string (3) force false (4) insert true false <class> <subclass> discriminator-value force <version> <version column="version_column" (1) name="propertyname" (2) type="typename" (3) access="field property ClassName" (4) unsaved-value="null negative undefined" (5) /> (1) column (2) name (3) type integer

47 (4) access property (5) unsaved-value undefined undefined long integer short timestamp calendar <timestamp> <timestamp column="timestamp_column" (1) name="propertyname" (2) access="field property ClassName" (3) unsaved-value="null undefined" (4) /> (1) column (2) name Date Timestamp (3) access property (4) unsaved-value null undefined <timestamp> <version type="timestamp"> <property> <property name="propertyname" (1) column="column_name" (2) type="typename" (3) update="true false" (4) insert="true false" (4) formula="arbitrary SQL expression" (5) access="field property ClassName" (6) /> (1) name (2) column (3) type (4) update, insert true UPDATE

48 INSERT false (5) formula (6) access property integer, string, character, date, timestamp, float, binary, serializable, object, blob int, float, char, java.lang.string, java.util.date, java.lang.integer, java.sql.clob PersistentEnum eg.color com.illflow.type.mycustomtype type Hibernate.DATE Hibernate.TIMESTAMP access access="field" net.sf.hibernate.property.propertyaccessor many-to-one <many-to-one name="propertyname" (1) column="column_name" (2) class="classname" (3) cascade="all none save-update delete" (4) outer-join="true false auto" (5) update="true false" (6) insert="true false" (6) property-ref="propertynamefromassociatedclass" (7) access="field property ClassName" (8) unique="true false" (9) /> (1) name (2) column (3) class (4) cascade

49 (5) outer-join auto hibernate.use_outer_join (6) update, insert true UPDATE INSERT false (7) property-ref (8) access property (9) unique cascade all save-update delete none none outer-join auto true false many-to-one <many-to-one name="product" class="product" column="product_id"/> property-ref Product unique <property name="serialnumber" unique="true" type="string" column="serial_number"/> OrderItem <many-to-one name="product" property-ref="serialnumber" column="product_serial_number"/> one-to-one <one-to-one name="propertyname" (1) class="classname" (2) cascade="all none save-update delete" (3) constrained="true false" (4) outer-join="true false auto" (5) property-ref="propertynamefromassociatedclass" (6) access="field property ClassName" (7)

50 /> (1) name (2) class (3) cascade (4) constrained save() delete() (5) outer-join auto hibernate.use_outer_join (6) property-ref (7) access property Employee Person <one-to-one name="person" class="person"/> <one-to-one name="employee" class="employee" constrained="true"/> foreign <class name="person" table="person"> <id name="id" column="person_id"> <generator class="foreign"> <param name="property">employee</param> </generator> </id>... <one-to-one name="employee" class="employee" constrained="true"/> </class> Employee Person employee Person Employee Person

51 <many-to-one name="person" class="person" column="person_id" unique="true"/> Person <one-to-one name"employee" class="employee" property-ref="person"/> <component> <component name="propertyname" (1) class="classname" (2) insert="true false" (3) upate="true false" (4) access="field property ClassName"> (5) <property.../> <many-to-one... />... </component> (1) name (2) class (3) insert INSERT (4) update UPDATE (5) access property <property> <component> <parent> <dynamic-component> Map <subclass> <subclass name="classname" (1) discriminator-value="discriminator_value" (2) proxy="proxyinterface" (3) lazy="true false" (4) dynamic-update="true false" dynamic-insert="true false"> <property... />...

52 </subclass> (1) name (2) discriminator-value (3) proxy (4) lazy lazy="true" #### <version> <id> discriminator-value <joined-subclass> <joined-subclass name="classname" (1) proxy="proxyinterface" (2) lazy="true false" (3) dynamic-update="true false" dynamic-insert="true false"> <key... > <property... />... </joined-subclass> (1) name (2) proxy (3) lazylazy="true" #### <key> <?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN" " <hibernate-mapping package="eg"> <class name="cat" table="cats"> <id name="id" column="uid" type="long"> <generator class="hilo"/> </id> <property name="birthdate" type="date"/> <property name="color" not-null="true"/> <property name="sex" not-null="true"/> <property name="weight"/> <many-to-one name="mate"/> <set name="kittens">

53 <key column="mother"/> <one-to-many class="cat"/> </set> <joined-subclass name="domesticcat" table="domestic_cats"> <key column="cat"/> <property name="name" type="string"/> </joined-subclass> </class> <class name="eg.dog"> <!-- ###Dog############ --> </class> </hibernate-mapping> auto-import="true" <import class="java.lang.object" rename="universe"/> <import /> class="classname" (1) rename="shortname" (2) (1) class (2) rename

54 integer, long, short, float, double, character, byte, boolean, yes_no, true_false boolean, yes_no true_false boolean java.lang.boolean string java.lang.string VARCHAR VARCHAR2 date, time, timestamp java.util.date DATE TIME TIMESTAMP calendar, calendar_date java.util.calendar TIMESTAMP DATE big_decimal java.math.bigdecimal NUMERIC NUMBER locale, timezone, currency java.util.locale java.util.timezone java.util.currency VARCHAR VARCHAR2 Locale Currency TimeZone ID class java.lang.class VARCHAR VARCHAR2 Class binary text

55 CLOB TEXT serializable PersistentEnum serializable clob, blob java.sql.clob java.sql.blob binary blob clob net.sf.hibernate.hibernate Type Hibernate.STRING string net.sf.hibernate.persistentenum toint() fromint() package eg; import net.sf.hibernate.persistentenum; public class Color implements PersistentEnum { private final int code; private Color(int code) { this.code = code; public static final Color TABBY = new Color(0); public static final Color GINGER = new Color(1); public static final Color BLACK = new Color(2); public int toint() { return code; public static Color fromint(int code) { switch (code) { case 0: return TABBY; case 1: return GINGER; case 2: return BLACK; default: throw new RuntimeException("Unknown color code"); eg.color java.lang.biginteger VARCHAR java.lang.string getname() setname() FIRST_NAME INITIAL SURNAME

56 net.sf.hibernate.usertype net.sf.hibernate.compositeusertype net.sf.hibernate.test.doublestringtype <property name="twostrings" type="net.sf.hibernate.test.doublestringtype"> <column name="first_string"/> <column name="second_string"/> </property> <column> MonetoryAmount CompositeUserType <any> <any name="anyentity" id-type="long" meta-type="eg.custom.class2tablenametype"> <column name="table_name"/> <column name="id"/> </any> meta-type id-type java.lang.class string character <any name="anyentity" id-type="long" meta-type="string"> <meta-value value="tbl_animal" class="animal"/> <meta-value value="tbl_human" class="human"/> <meta-value value="tbl_alien" class="alien"/> <column name="table_name"/> <column name="id"/> </any> <any > name="propertyname" (1) id-type="idtypename" (2) meta-type="metatypename" (3) cascade="none all save-update" (4) access="field property ClassName" (5) <meta-value... /> <meta-value... />

57 </any>... <column... /> <column... />... (1) name (2) id-type (3) meta-type class java.lang.class (4) cascade none (5) access property object Dialect <class name="lineitem" table="`line Item`"> <id name="id" column="`item Id`"/><generator class="assigned"/></id> <property name="itemnumber" column="`item #`"/>... </class> hibernate-mapping subclass joined-subclass extends <hibernate-mapping> <subclass name="eg.subclass.domesticcat" extends="eg.cat" discriminator-value="d"> <property name="name" type="string"/> </subclass> </hibernate-mapping>

58 java.util.map java.util.set java.util.sortedmap java.util.sortedset java.util.list java.util.collection java.util.list LinkedHashSet HashMap HashSet TreeMap TreeSet ArrayList HashMap TreeSet ArrayListMap Set List Map Set ListMap Set List Cat cat <literal>==</literal> new DomesticCat(); Cat kitten = new DomesticCat();... Set kittens = new HashSet(); kittens.add(kitten); cat.setkittens(kittens); session.save(cat); kittens = cat.getkittens(); //Okay, kittens collection is a Set (HashSet) cat.getkittens(); //Error! <key>

59 <element> <composite-element> <one-to-many> <many-to-many> <many-to-any> SetListMap Map # # <index> <index-many-to-many> <composite-index> <index-many-to-any> <set> <list> <map> <bag> <array> <primitive-array> <map> <map name="propertyname" (1) table="table_name" (2) schema="schema_name" (3) lazy="true false" (4) inverse="true false" (5) cascade="all none save-update delete all-delete-orphan" (6) sort="unsorted natural comparatorclass" (7) order-by="column_name asc desc" (8) where="arbitrary sql where condition" (9) outer-join="true false auto" (10) batch-size="n" (11) access="field property ClassName" (12) > <key... /> <index... /> <element... /> </map> (1) name (2) table (3) schema (4) lazy false (5) inverse false (6) cascade none (7) sort ## (8) order-by asc descmap Set

60 (9) WHERE (10) SELECT (11) batch-size 1 (12) access property Listfoo[i]i SetList Set List Map List List BagList ListCollection<bag> CollectionList inverse="false" <key> <key column="column_name"/> (1) column <index> <index /> column="column_name" (1) type="typename" (2)

61 (1) column (2) type <index-many-to-many> <index-many-to-many column="column_name" (1) class="classname" (2) /> (1) column (2) class <element> <element column="column_name" (1) type="typename" (2) /> (1) column (2) type <many-to-many column="column_name" (1) class="classname" (2) outer-join="true false auto" (3) /> (1) column (2) class (3) outer-join auto hibernate.use_outer_join <set name="names" table="names"> <key column="groupid"/> <element column="name" type="string"/> </set> order-by <bag name="sizes" table="sizes" order-by="size ASC"> <key column="owner"/> <element column="size" type="integer"/> </bag> cascade="all" <array name="foos" table="bar_foos" cascade="all"> <key column="bar_id"/>

62 <index column="i"/> <many-to-many column="foo_id" class="org.hibernate.foo"/> </array> <map name="holidays" table="holidays" schema="dbo" order-by="hol_name asc"> <key column="id"/> <index column="hol_name" type="string"/> <element column="hol_date" type="date"/> </map> <list name="carcomponents" table="car_components"> <key column="car_id"/> <index column="posn"/> <composite-element class="org.hibernate.car.carcomponent"> <property name="price" type="float"/> <property name="type" type="org.hibernate.car.componenttype"/> <property name="serialnumber" column="serial_no" type="string"/> </composite-element> </list> FooBar Bar <key><index> <one-to-many> <one-to-many class="classname"/> (1) class <set name="bars"> <key column="foo_id"/> <one-to-many class="org.hibernate.bar"/> </set> <one-to-many>####

63 <one-to-many><key>not NULL inverse="true" s = sessions.opensession(); User u = (User) s.find("from User u where u.name=?", username, Hibernate.STRING).get(0); Map permissions = u.getpermissions(); s.connection().commit(); s.close(); Integer accesslevel = (Integer) permissions.get("accounts"); // Error! Session LazyInitializationException lazy <set name="names" table="names" lazy="true"> <key column="group_id"/> <element column="name" type="string"/> </set> Session Session Session

64 Session Session######### Hibernate.initialize() FETCH update()lock()session filter() ( (Integer) s.filter( collection, "select count(*)" ).get(0) ).intvalue() filter()createfilter() java.util.sortedmapjava.util.sortedset <set name="aliases" table="person_aliases" sort="natural"> <key column="person"/> <element column="name" type="string"/> </set> <map name="holidays" sort="my.custom.holidaycomparator" lazy="true"> <key column="year_id"/> <index column="hol_name" type="string"/> <element column="hol_date" type="date"/> </map> ###unsortednaturaljava.util.comparator java.util.treesetjava.util.treemap set bag maporder-by LinkedHashSetLinkedHashMap <set name="aliases" table="person_aliases" order-by="name asc"> <key column="person"/> <element column="name" type="string"/> </set>

65 <map name="holidays" order-by="hol_date, hol_name" lazy="true"> <key column="year_id"/> <index column="hol_name" type="string"/> <element column="hol_date type="date"/> </map> order-by filter() sortedusers = s.filter( group.getusers(), "order by this.name" ); <idbag>### <idbag>collection <idbag name="lovers" table="lovers" lazy="true"> <collection-id column="id" type="long"> <generator class="hilo"/> </collection-id> <key column="person1"/> <many-to-many column="person2" class="eg.person" outer-join="true"/> </idbag> <idbag> <idbag><bag> <idbag>native

66 <class name="org.hibernate.auction.category"> <id name="id" column="id"/>... <bag name="items" table="category_item" lazy="true"> <key column="category_id"/> <many-to-many class="org.hibernate.auction.item" column="item_id"/> </bag> </class> <class name="org.hibernate.auction.item"> <id name="id" column="id"/>... <!-- inverse end --> <bag name="categories" table="category_item" inverse="true" lazy="true"> <key column="item_id"/> <many-to-many class="org.hibernate.auction.category" column="category_id"/> </bag> </class> category.getitems().add(item); item.getcategories().add(category); session.update(item); session.update(category); // The category now "knows" about the relationship // The item now "knows" about the relationship // No effect, nothing will be saved! // The relationship will be saved inverse="true" <class name="eg.parent"> <id name="id" column="id"/>... <set name="children" inverse="true" lazy="true"> <key column="parent_id"/> <one-to-many class="eg.child"/> </set> </class>

67 <class name="eg.child"> <id name="id" column="id"/>... <many-to-one name="parent" class="eg.parent" column="parent_id"/> </class> inverse="true" Map <map name="contracts" lazy="true"> <key column="employer_id"/> <index-many-to-many column="employee_id" class="employee"/> <one-to-many class="contract"/> </map> <map name="connections" lazy="true"> <key column="node1_id"/> <index-many-to-many column="node2_id" class="node"/> <many-to-many column="connection_id" class="connection"/> </map> <many-to-any><index-many-to-any> <any> package eg; import java.util.set; public class Parent { private long id; private Set children; public long getid() { return id; private void setid(long id) { this.id=id; private Set getchildren() { return children; private void setchildren(set children) { this.children=children; eg.child

68 <hibernate-mapping> <class name="eg.parent"> <id name="id"> <generator class="sequence"/> </id> <set name="children" lazy="true"> <key column="parent_id"/> <one-to-many class="eg.child"/> </set> </class> <class name="eg.child"> <id name="id"> <generator class="sequence"/> </id> <property name="name"/> </class> </hibernate-mapping> create table parent ( id bigint not null primary key ) create table child ( id bigint not null primary key, name varchar(255), parent_id bigint ) alter table child add constraint childfk0 (parent_id) references parent <hibernate-mapping> <class name="eg.parent"> <id name="id"> <generator class="sequence"/> </id> <set name="children" inverse="true" lazy="true"> <key column="parent_id"/> <one-to-many class="eg.child"/> </set> </class> <class name="eg.child"> <id name="id"> <generator class="sequence"/> </id> <property name="name"/> <many-to-one name="parent" class="eg.parent" column="parent_id" not-null="true"/> </class> </hibernate-mapping> NOT NULL create table parent ( id bigint not null primary key ) create table child ( id bigint not null primary key, name varchar(255), parent_id bigint not null ) alter table child add constraint childfk0 (parent_id) references parent <hibernate-mapping>

69 <class name="eg.parent"> <id name="id"> <generator class="sequence"/> </id> <set name="children" lazy="true" table="childset"> <key column="parent_id"/> <many-to-many class="eg.child" column="child_id"/> </set> </class> <class name="eg.child"> <id name="id"> <generator class="sequence"/> </id> <property name="name"/> </class> </hibernate-mapping> create table parent ( id bigint not null primary key ) create table child ( id bigint not null primary key, name varchar(255) ) create table childset ( parent_id bigint not null, child_id bigint not null, primary key ( parent_id, child_id ) ) alter table childset add constraint childsetfk0 (parent_id) references parent alter table childset add constraint childsetfk1 (child_id) references child

70 public class Person { private java.util.date birthday; private Name name; private String key; public String getkey() { return key; private void setkey(string key) { this.key=key; public java.util.date getbirthday() { return birthday; public void setbirthday(java.util.date birthday) { this.birthday = birthday; public Name getname() { return name; public void setname(name name) { this.name = name; public class Name { char initial; String first; String last; public String getfirst() { return first; void setfirst(string first) { this.first = first; public String getlast() { return last; void setlast(string last) { this.last = last; public char getinitial() { return initial; void setinitial(char initial) { this.initial = initial; NamePersonName

71 <class name="eg.person" table="person"> <id name="key" column="pid" type="string"> <generator class="uuid.hex"/> </id> <property name="birthday" type="date"/> <component name="name" class="eg.name"> <!-- class attribute optional --> <property name="initial"/> <property name="first"/> <property name="last"/> </component> </class> pid birthday initial first last <component> <parent> <class name="eg.person" table="person"> <id name="key" column="pid" type="string"> <generator class="uuid.hex"/> </id> <property name="birthday" type="date"/> <component name="name" class="eg.name"> <parent name="namedperson"/> <!-- reference back to the Person --> <property name="initial"/> <property name="first"/> <property name="last"/> </component> </class> Name<element> <composite-element> <set name="somenames" table="some_names" lazy="true"> <key column="id"/> <composite-element class="eg.name"> <!-- class attribute required --> <property name="initial"/> <property name="first"/> <property name="last"/> </composite-element> </set>

72 Setequals()hashCode() <nested-composite-element> <set> <list> <map> <bag> <idbag> <many-to-one> OrderpurchaseDateprice quantityitem <class name="eg.order"... >... <set name="purchaseditems" table="purchase_items" lazy="true"> <key column="order_id"> <composite-element class="eg.purchase"> <property name="purchasedate"/> <property name="price"/> <property name="quantity"/> <many-to-one name="item" class="eg.item"/> <!-- class########## --> </composite-element> </set> </class> <class name="eg.order"... >... <set name="purchaseditems" table="purchase_items" lazy="true"> <key column="order_id"> <composite-element class="eg.orderline"> <many-to-one name="purchasedetails class="eg.purchase"/> <many-to-one name="item" class="eg.item"/> </composite-element> </set> </class> <composite-index>map hashcode()equals()

73 java.io.serializable equals() hashcode() IdentifierGenerator unsaved-value saveorupdate() Interceptor.isUnsaved() <version><timestamp>unsaved-value Interceptor.isUnsaved() <id><composite-id><component> <class name="eg.foo" table"foos"> <composite-id name="compid" class="eg.foocompositeid"> <key-property name="string"/> <key-property name="short"/> <key-property name="date" column="date_" type="date"/> </composite-id> <property name="name"/>... </class> FOOS Foo <many-to-one name="foo" class="eg.foo"> <!-- the "class" attribute is optional, as usual --> <column name="foo_string"/> <column name="foo_short"/> <column name="foo_date"/> </many-to-one> <column>column Foo <set name="foos"> <key column="owner_id"/> <many-to-many class="eg.foo"> <column name="foo_string"/> <column name="foo_short"/> <column name="foo_date"/> </many-to-many> </set>

74 <one-to-many> Foo <class name="eg.foo"> <set name="dates" lazy="true"> <key> <!-- a collection inherits the composite key type --> <column name="foo_string"/> <column name="foo_short"/> <column name="foo_date"/> </key> <element column="foo_date" type="date"/> </set> </class> Map <dynamic-component name="userattributes"> <property name="foo" column="foo"/> <property name="bar" column="bar"/> <many-to-one name="baz" class="eg.baz" column="baz"/> </dynamic-component> <dynamic-component><component>

75 <class><subclass><joined-subclass> PaymentCreditCardPayment CashPayment ChequePayment <class name="payment" table="payment"> <id name="id" type="long" column="payment_id"> <generator class="native"/> </id> <discriminator column="payment_type" type="string"/> <property name="amount" column="amount"/>... <subclass name="creditcardpayment" discriminator-value="credit">... </subclass> <subclass name="cashpayment" discriminator-value="cash">... </subclass> <subclass name="chequepayment" discriminator-value="cheque">... </subclass> </class> NOT NULL <class name="payment" table="payment"> <id name="id" type="long" column="payment_id"> <generator class="native"/> </id> <property name="amount" column="amount"/>... <joined-subclass name="creditcardpayment" table="credit_payment"> <key column="payment_id"/>... </joined-subclass> <joined-subclass name="cashpayment" table="cash_payment"> <key column="payment_id"/>... </joined-subclass> <joined-subclass name="chequepayment" table="cheque_payment">

76 <key column="payment_id"/>... </joined-subclass> </class> Payment <many-to-one> <many-to-one name="payment" column="payment" class="payment"/> <class name="creditcardpayment" table="credit_payment"> <id name="id" type="long" column="credit_payment_id"> <generator class="native"/> </id> <property name="amount" column="credit_amount"/>... </class> <class name="cashpayment" table="cash_payment"> <id name="id" type="long" column="cash_payment_id"> <generator class="native"/> </id> <property name="amount" column="cash_amount"/>... </class> <class name="chequepayment" table="cheque_payment"> <id name="id" type="long" column="cheque_payment_id"> <generator class="native"/> </id> <property name="amount" column="cheque_amount"/>... </class> Payment Payment Payment<any> <any name="payment" meta-type="class" id-type="long"> <column name="payment_class"/> <column name="payment_id"/> </any>

77 Paymentmeta-type UserType <any name="payment" meta-type="paymentmetatype" id-type="long"> <column name="payment_type"/> <!-- CREDIT, CASH ## CHEQUE --> <column name="payment_id"/> </any> <class> Payment Payment <class name="creditcardpayment" table="credit_payment"> <id name="id" type="long" column="credit_payment_id"> <generator class="native"/> </id> <discriminator column="credit_card" type="string"/> <property name="amount" column="credit_amount"/>... <subclass name="mastercardpayment" discriminator-value="mdc"/> <subclass name="visapayment" discriminator-value="visa"/> </class> <class name="nonelectronictransaction" table="nonelectronic_txn"> <id name="id" type="long" column="txn_id"> <generator class="native"/> </id>... <joined-subclass name="cashpayment" table="cash_payment"> <key column="payment_id"/> <property name="amount" column="cash_amount"/>... </joined-subclass> <joined-subclass name="chequepayment" table="cheque_payment"> <key column="payment_id"/> <property name="amount" column="cheque_amount"/>... </joined-subclass> </class> PaymentPayment from Payment Nonel ectronictransactioncreditcardpayment PaymentCashPayment ChequePayment inverse="true"insert="false" update="false"

78 load()/get() <many-to-one><one-to-one><one-to-many><many-to-many> s.get(payment.class, from id) Payment p <many-to-one><one-to-one><one-to-many><many-to-many> s.get(payment.class, from id) Payment p from Order o join o.payment p from Order o join o.payment p <any> <many-to-any> from Payment p

79 Session DomesticCat fritz = new DomesticCat(); fritz.setcolor(color.ginger); fritz.setsex('m'); fritz.setname("fritz"); Long generatedid = (Long) sess.save(fritz); DomesticCat pk = new DomesticCat(); pk.setcolor(color.tabby); pk.setsex('f'); pk.setname("pk"); pk.setkittens( new HashSet() ); pk.addkitten(fritz); sess.save( pk, new Long(1234) ); save() fritz pk NOT NULL save() NOT NULL Session load() Cat fritz = (Cat) sess.load(cat.class, generatedid); // ######################## long pkid = 1234; DomesticCat pk = (DomesticCat) sess.load( Cat.class, new Long(pkId) ); Cat cat = new DomesticCat(); // pk####cat####### sess.load( cat, new Long(pkId) ); Set kittens = cat.getkittens(); load() load()

80 get() Cat cat = (Cat) sess.get(cat.class, id); if (cat==null) { cat = new Cat(); sess.save(cat, id); return cat; SELECT... FOR UPDATE LockMode Cat cat = (Cat) sess.get(cat.class, id, LockMode.UPGRADE); FOR UPDATE refresh() sess.save(cat); sess.flush(); // SQL#INSERT###### sess.refresh(cat); // ##################### Session find() List cats = sess.find( "from Cat as cat where cat.birthdate =?", date, Hibernate.DATE ); List mates = sess.find( "select mate from Cat as cat join cat.mate as mate " + "where cat.name =?", name, Hibernate.STRING ); List cats = sess.find( "from Cat as cat where cat.mate.bithdate is null" ); List morecats = sess.find( "from Cat as cat where " + "cat.name = 'Fritz' or cat.id =? or cat.id =?", new Object[] { id1, id2, new Type[] { Hibernate.LONG, Hibernate.LONG ); List mates = sess.find( "from Cat as cat where cat.mate =?", izi,

81 ); Hibernate.entity(Cat.class) List problems = sess.find( "from GoldFish as fish " + "where fish.birthday > fish.deceased or fish.birthday is null" ); find()? PreparedStatement net.sf.hibernate.type.type Hibernate iterate() java.util.iterator // id###### Iterator iter = sess.iterate("from eg.qux q order by q.likeliness"); while ( iter.hasnext() ) { Qux qux = (Qux) iter.next(); // ############ // ############# if ( qux.calculatecomplicatedalgorithm() ) { // ############### iter.remove(); // ############### break; java.util.iterator LazyInitializationException RuntimeException iterate() find() iterate() Iterator iter = sess.iterate( "select customer, product " + "from Customer customer, " + "Product product " + "join customer.purchases purchase " + "where product = purchase.product" ); find() ResultSet

82 Iterator foosandbars = sess.iterate( "select foo, bar from Foo foo, Bar bar " + "where bar.date = foo.date" ); while ( foosandbars.hasnext() ) { Object[] tuple = (Object[]) foosandbars.next(); Foo foo = tuple[0]; Bar bar = tuple[1];... select Iterator results = sess.iterate( "select cat.color, min(cat.birthdate), count(cat) from Cat cat " + "group by cat.color" ); while ( results.hasnext() ) { Object[] row = results.next(); Color type = (Color) row[0]; Date oldest = (Date) row[1]; Integer count = (Integer) row[2];... Iterator iter = sess.iterate( "select cat.type, cat.birthdate, cat.name from DomesticCat cat" ); List list = sess.find( "select cat, cat.mate.name from DomesticCat cat" ); net.sf.hibernate.query Query q = sess.createquery("from DomesticCat cat"); q.setfirstresult(20); q.setmaxresults(10); List cats = q.list(); CDATA <query name="eg.domesticcat.by.name.and.minimum.weight"><![cdata[ from eg.domesticcat as cat where cat.name =? and cat.weight >? ] ]></query> Query q = sess.getnamedquery("eg.domesticcat.by.name.and.minimum.weight"); q.setstring(0, name); q.setint(1, minweight); List cats = q.list();

83 :name Query? // ############### Query q = sess.createquery("from DomesticCat cat where cat.name = :name"); q.setstring("name", "Fritz"); Iterator cats = q.iterate(); // ####### Query q = sess.createquery("from DomesticCat cat where cat.name =?"); q.setstring(0, "Izi"); Iterator cats = q.iterate(); // ############# List names = new ArrayList(); names.add("izi"); names.add("fritz"); Query q = sess.createquery("from DomesticCat cat where cat.name in (:nameslist)"); q.setparameterlist("nameslist", names); List cats = q.list(); ResultSet Query ScrollableResults Query q = sess.createquery("select cat.name, cat from DomesticCat cat " + "order by cat.name"); ScrollableResults cats = q.scroll(); if ( cats.first() ) { // cat##################################### firstnamesofpages = new ArrayList(); do { String name = cats.getstring(0); firstnamesofpages.add(name); while ( cats.scroll(page_size) ); // cat############# pageofcats = new ArrayList(); cats.beforefirst(); int i=0; while( ( PAGE_SIZE > i++ ) && cats.next() ) pageofcats.add( cats.get(1) );

84 this Collection blackkittens = session.filter( pk.getkittens(), "where this.color =?", Color.BLACK, Hibernate.enum(Color.class) ); from Collection blackkittenmates = session.filter( pk.getkittens(), "select this.mate where this.color = eg.color.black" ); Criteria Criteria crit = session.createcriteria(cat.class); crit.add( Expression.eq("color", eg.color.black) ); crit.setmaxresults(10); List cats = crit.list(); Criterion createsqlquery() List cats = session.createsqlquery( "SELECT {cat.* FROM CAT {cat WHERE ROWNUM<10", "cat", Cat.class ).list(); List cats = session.createsqlquery( "SELECT {cat.id AS {cat.id, {cat.sex AS {cat.sex, " + "{cat.mate AS {cat.mate, {cat.subclass AS {cat.class,... " + "FROM CAT {cat WHERE ROWNUM<10", "cat", Cat.class ).list()

85 Session Session Session load() DomesticCat cat = (DomesticCat) sess.load( Cat.class, new Long(69) ); cat.setname("pk"); sess.flush(); // cat#################### SELECT UPDATE Session.update() // ###Session# Cat cat = (Cat) firstsession.load(cat.class, catid); Cat potentialmate = new Cat(); firstsession.save(potentialmate); // ############### cat.setmate(potentialmate); // #######Session# secondsession.update(cat); // cat### secondsession.update(mate); // mate### catid Cat secondsession update() saveorupdate() <id> <version> <timestamp> unsaved-value <id name="id" type="long" column="uid" unsaved-value="null"> <generator class="hilo"/> </id>

86 unsaved-value any none null undefined version timestamp // ###Session# Cat cat = (Cat) firstsession.load(cat.class, catid); // ############### Cat mate = new Cat(); cat.setmate(mate); // #######Session# secondsession.saveorupdate(cat); secondsession.saveorupdate(mate); // ############cat#null###id######## // #################mate#null#id######## saveorupdate() update() saveorupdate() update() saveorupdate() update() saveorupdate() save() unsaved-value save() version timestamp unsaved-value="undefined" saveorupdatecopy(object o) saveorupdate() saveorupdatecopy()

87 lock() // ######### sess.lock(fritz, LockMode.NONE); // ##################### sess.lock(izi, LockMode.READ); // SELECT... FOR UPDATE######################## sess.lock(pk, LockMode.UPGRADE); Session.delete() delete() sess.delete(cat); delete() NOT NULL Session find() iterate() net.sf.hibernate.transaction.commit() Session.flush() Session.save() Session.delete() native flush() Session Session.find(..)

88 FlushMode sess = sf.opensession(); Transaction tx = sess.begintransaction(); sess.setflushmode(flushmode.commit); // ################### Cat izi = (Cat) sess.load(cat.class, id); izi.setname(iznizi); // #############... sess.find("from Cat as cat left outer join cat.kittens kitten"); // izi###############... tx.commit(); // ########### Transaction Session.flush() Transaction tx.commit(); // Session####################### commit() sess.flush(); sess.connection().commit(); // JTA############### tx.rollback(); // ##################]></programlisting> <para> or: </para>

89 <programlisting><![cdata[// JTA############################ sess.connection().rollback(); Session.close() close() tx.commit(); sess.close(); sess.flush(); sess.connection().commit(); sess.close(); // JTA############### close() close() HibernateException getcause() Session Session.close() Session Session HibernateException RuntimeException HibernateException.java extends JDBCException.getCause() JDBCConnectionException SQLGrammarException ConstraintViolationException LockAcquisitionException

90 GenericJDBCException Session Session sess = factory.opensession(); Transaction tx = null; try { tx = sess.begintransaction(); // do some work... tx.commit(); catch (Exception e) { if (tx!=null) tx.rollback(); throw e; finally { sess.close(); Session sess = factory.opensession(); try { // do some work... sess.flush(); sess.connection().commit(); catch (Exception e) { sess.connection().rollback(); throw e; finally { sess.close(); SessionContext ctx =... ; Session sess = factory.opensession(); try { // do some work... sess.flush(); catch (Exception e) { // ctx.setrollbackonly(); throw new EJBException(e); finally { sess.close(); java.lang.runtimeexception HibernateException EJBContext

91 setrollbackonly() RuntimeException EJBException save() saveorupdate() update() cascade="all" cascade="save-update" delete() cascade="all" cascade="all-delete-orphan" cascade="delete" cascade="all" save() delete() cascade="save-update" delete() cascade="all" cascade="all-delete-orphan" <one-to-many> saveorupdate() update() saveorupdate() saveorupdate() saveorupdate() delete() cascade="all-delete-orphan" cascade="save-update" <hibernate-mapping> default-cascade

92 Interceptor Interceptor Auditable createtimestamp Auditable lastupdatetimestamp package net.sf.hibernate.test; import java.io.serializable; import java.util.date; import java.util.iterator; import net.sf.hibernate.interceptor; import net.sf.hibernate.type.type; public class AuditInterceptor implements Interceptor, Serializable { private int updates; private int creates; public void ondelete(object entity, Serializable id, Object[] state, String[] propertynames, Type[] types) { // ###### public boolean onflushdirty(object entity, Serializable id, Object[] currentstate, Object[] previousstate, String[] propertynames, Type[] types) { if ( entity instanceof Auditable ) { updates++; for ( int i=0; i < propertynames.length; i++ ) { if ( "lastupdatetimestamp".equals( propertynames[i] ) ) { currentstate[i] = new Date(); return true; return false; public boolean onload(object entity, Serializable id, Object[] state, String[] propertynames, Type[] types) { return false; public boolean onsave(object entity, Serializable id, Object[] state, String[] propertynames, Type[] types) { if ( entity instanceof Auditable ) { creates++; for ( int i=0; i<propertynames.length; i++ ) { if ( "createtimestamp".equals( propertynames[i] ) ) { state[i] = new Date(); return true;

93 return false; public void postflush(iterator entities) { System.out.println("Creations: " + creates + ", Updates: " + updates); public void preflush(iterator entities) { updates=0; creates=0; Session session = sf.opensession( new AuditInterceptor() ); Configuration new Configuration().setInterceptor( new AuditInterceptor() ); ClassMetadata CollectionMetadata Type SessionFactory Cat fritz =...; Long id = (Long) catmeta.getidentifier(fritz); ClassMetadata catmeta = sessionfactory.getclassmetadata(cat.class); Object[] propertyvalues = catmeta.getpropertyvalues(fritz); String[] propertynames = catmeta.getpropertynames(); Type[] propertytypes = catmeta.getpropertytypes(); // ################################# // TODO: #########? Map namedvalues = new HashMap(); for ( int i=0; i<propertynames.length; i++ ) { if (!propertytypes[i].isentitytype() &&!propertytypes[i].iscollectiontype() ) { namedvalues.put( propertynames[i], propertyvalues[i] );

94 Session SessionFactory Session SessionFactory SessionFactory sf = (SessionFactory)getServletContext().getAttribute("my.session.factory"); Session flush() commit() close() SessionFactory setsessioncontext() SessionFactory Session flush() close() commit() Transaction Transaction commit() flush() Session Transaction Session Session

95 Session Session Session Session Session foo.getid().equals( bar.getid() ) foo==bar Session Session Session == Session

96 Session Session // foo####session############## session.reconnect(); foo.setproperty("bar"); session.flush(); session.connection().commit(); session.disconnect(); foo Session Session Session HttpSession Session Session Session Session Session.update() Session.saveOrUpdate() // foo####session############## foo.setproperty("bar"); session = factory.opensession(); session.saveorupdate(foo); session.flush(); session.connection().commit(); session.close(); update() lock() LockMode.READ Session // foo####session############## session = factory.opensession(); int oldversion = foo.getversion(); session.load( foo, foo.getkey() );

97 if ( oldversion!=foo.getversion ) throw new StaleObjectStateException(); foo.setproperty("bar"); session.flush(); session.connection().commit(); session.close(); Session HttpSession Session Transaction Session Session.disconnect() Session.reconnect() Session.lock() SessionFactory sessions; List foolist; Bar bar;... Session s = sessions.opensession(); Transaction tx = null; try { tx = s.begintransaction(); foolist = s.find( "select foo from eg.foo foo where foo.date = current date" // DB2#date####### ); bar = (Bar) s.create(bar.class); tx.commit(); catch (Exception e) { if (tx!=null) tx.rollback(); s.close(); throw e; s.disconnect(); s.reconnect(); try { tx = s.begintransaction();

98 bar.setfootable( new HashMap() ); Iterator iter = foolist.iterator(); while ( iter.hasnext() ) { Foo foo = (Foo) iter.next(); s.lock(foo, LockMode.READ); // foo############### bar.getfootable().put( foo.getname(), foo ); tx.commit(); catch (Exception e) { if (tx!=null) tx.rollback(); throw e; finally { s.close(); Transaction Session Session Transaction LockMode LockMode.WRITE LockMode.UPGRADE SELECT... FOR UPDATE LockMode.UPGRADE_NOWAIT SELECT... FOR UPDATE NOWAIT LockMode.READ LockMode.NONE Transaction update() saveorupdate() LockMode Session.load() Session.lock() Query.setLockMode() Session.load() UPGRADE UPGRADE_NOWAIT

99 SELECT... FOR UPDATE load() lock() READ UPGRADE UPGRADE_NOWAIT Session.lock() UPGRADE UPGRADE_NOWAIT SELECT... FOR UPDATE

100 SeLeCT select SELECT net.sf.hibernate.eg.foonet.sf.hibernate.eg.foo foo.barset foo.barset from eg.cat eg.cat Cat from eg.cat as cat Catcat as from eg.cat cat from Formula, Parameter from Formula as form, Parameter as param domesticcat ####

101 from eg.cat as cat inner join cat.mate as mate left outer join cat.kittens as kitten from eg.cat as cat left join cat.mate.kittens as kittens from Formula form full join form.parameter param ######### ############# ############# ####### ################################### from eg.cat as cat join cat.mate as mate left join cat.kittens as kitten from eg.cat as cat inner join fetch cat.mate left join fetch cat.kittens where fetch scroll()iterate() ## ############################# select select mate from eg.cat as cat inner join cat.mate as mate Catmate select cat.mate from eg.cat cat elements

102 select elements(cat.kittens) from eg.cat cat select cat.name from eg.domesticcat cat where cat.name like 'fri%' select cust.name.firstname from Customer as cust Object[] select mother, offspr, mate.name from eg.domesticcat as mother inner join mother.mate as mate left outer join mother.kittens as offspr Family select new Family(mother, mate, offspr) from eg.domesticcat as mother join mother.mate as mate left join mother.kittens as offspr select avg(cat.weight), sum(cat.weight), max(cat.weight), count(cat) from eg.cat cat select select cat, count( elements(cat.kittens) ) from eg.cat cat group by cat avg(...), sum(...), min(...), max(...) count(*) count(...), count(distinct...), count(all...) distinctall select distinct cat.name from eg.cat cat select count(distinct cat.name), count(cat) from eg.cat cat CatDomesticCat

103 from eg.cat as cat from from java.lang.object o Named from eg.named n, eg.named m where n.name = m.name SELECT order by Query.scroll() where from eg.cat as cat where cat.name='fritz' Cat select foo from eg.foo foo, eg.bar bar where foo.startdate = bar.date FoostartDatedatebar Foowhere from eg.cat cat where cat.mate.name is not null from eg.foo foo where foo.bar.baz.customer.address.city is not null = from eg.cat cat, eg.cat rival where cat.mate = rival.mate select cat, mate from eg.cat cat, eg.cat mate where cat.mate = mate id

104 from eg.cat as cat where cat.id = 123 from eg.cat as cat where cat.mate.id = 69 PersoncountrymedicareNumber from bank.person person where person.id.country = 'AU' and person.id.medicarenumber = from bank.account account where account.owner.id.country = 'AU' and account.owner.id.medicarenumber = class from eg.cat cat where cat.class = eg.domesticcat store.owneraddress store.owner.address.city // OK store.owner.address // ###! idclass AuditLog.item<any> from eg.auditlog log, eg.payment payment where log.item.class = 'eg.payment' and log.item.id = payment.id log.item.classpayment.class where +, -, *, / =, >=, <=, <>,!=, like and, or, not upper() lower() ( ) in between is null

105 ? :name :start_date :x1 'foo' 69 ' :00:01.0' public static finaleg.color.tabby in between from eg.domesticcat cat where cat.name between 'A' and 'B' from eg.domesticcat cat where cat.name in ( 'Foo', 'Bar', 'Baz' ) from eg.domesticcat cat where cat.name not between 'A' and 'B' from eg.domesticcat cat where cat.name not in ( 'Foo', 'Bar', 'Baz' ) is null is not null <property name="hibernate.query.substitutions">true 1, false 0</property> true false1 0 from eg.cat cat where cat.alive = true sizesize() from eg.cat cat where cat.kittens.size > 0 from eg.cat cat where size(cat.kittens) > 0 minindex maxindex minelement maxelement from Calendar cal where cal.holidays.maxelement > current date from Order order where maxindex(order.items) > 100 from Order order where minelement(order.items) > elements indices any, some, all, exists, in select mother from eg.cat as mother, eg.cat as kit where kit in elements(foo.kittens) select p from eg.namelist list, eg.person p where p.name = some elements(list.names) from eg.cat cat where exists elements(cat.kittens)

106 from eg.player p where 3 > all elements(p.scores) from eg.show show where 'fizard' in indices(show.acts) size elements indices minindex maxindex minelement maxelement where select#### from Order order where order.items[0].id = 1234 select person from Person person, Calendar calendar where calendar.holidays['national day'] = person.birthday and person.nationality.calendar = calendar select item from Item item, Order order where order.items[ order.delivereditemindices[0] ] = item and order.id = 11 select item from Item item, Order order where order.items[ maxindex(order.items) ] = item and order.id = 11 [] select item from Item item, Order order where order.items[ size(order.items) - 1 ] = item index() select item, index(item) from Order order join order.items item where index(item) < 5 from eg.domesticcat cat where upper(cat.name) like 'FRI%' select cust from Product prod, Store store inner join store.customers cust where prod.name = 'widget' and store.location.name in ( 'Melbourne', 'Sydney' ) and prod = all elements(cust.currentorder.lineitems) SELECT cust.name, cust.address, cust.phone, cust.id, cust.current_order FROM customers cust, stores store, locations loc, store_customers sc,

107 product prod WHERE prod.name = 'widget' AND store.loc_id = loc.id AND loc.name IN ( 'Melbourne', 'Sydney' ) AND sc.store_id = store.id AND sc.cust_id = cust.id AND prod.id = ALL( SELECT item.prod_id FROM line_items item, orders o WHERE item.order_id = o.id AND cust.current_order = o.id ) from eg.domesticcat cat order by cat.name asc, cat.weight desc, cat.birthdate asc desc select cat.color, sum(cat.weight), count(cat) from eg.cat cat group by cat.color select foo.id, avg( elements(foo.names) ), max( indices(foo.names) ) from eg.foo foo group by foo.id elements indices having select cat.color, sum(cat.weight), count(cat) from eg.cat cat group by cat.color having cat.color in (eg.color.tabby, eg.color.black) having order by select cat from eg.cat cat join cat.kittens kitten group by cat having avg(kitten.weight) > 100 order by count(kitten) asc, sum(kitten.weight) desc group byorder by

108 from eg.cat as fatcat where fatcat.weight > ( select avg(cat.weight) from eg.domesticcat cat ) from eg.domesticcat as cat where cat.name = some ( select name.nickname from eg.name as name ) from eg.cat as cat where not exists ( from eg.cat as mate where mate.mate = cat ) from eg.domesticcat as cat where cat.name not in ( select name.nickname from eg.name as name ) ORDER ORDER_LINE PRODUCT CATALOG PRICE select order.id, sum(price.amount), count(item) from Order as order join order.lineitems as item join item.product as product, Catalog as catalog join catalog.prices as price where order.paid = false and order.customer = :customer and price.product = product and catalog.effectivedate < sysdate and catalog.effectivedate >= all ( select cat.effectivedate from Catalog as cat where cat.effectivedate < sysdate ) group by order having sum(price.amount) > :minamount order by sum(price.amount) desc

109 select order.id, sum(price.amount), count(item) from Order as order join order.lineitems as item join item.product as product, Catalog as catalog join catalog.prices as price where order.paid = false and order.customer = :customer and price.product = product and catalog = :currentcatalog group by order having sum(price.amount) > :minamount order by sum(price.amount) desc AWAITING_APPROVAL PAYMENT PAYMENT_STATUS PAYMENT_STATUS_CHANGE select count(payment), status.name from Payment as payment join payment.currentstatus as status join payment.statuschanges as statuschange where payment.status.name <> PaymentStatus.AWAITING_APPROVAL or ( statuschange.timestamp = ( select max(change.timestamp) from PaymentStatusChange change where change.payment = payment ) and statuschange.user <> :currentuser ) group by status.name, status.sortorder order by status.sortorder statuschanges select count(payment), status.name from Payment as payment join payment.currentstatus as status where payment.status.name <> PaymentStatus.AWAITING_APPROVAL or payment.statuschanges[ maxindex(payment.statuschanges) ].user <> :currentuser group by status.name, status.sortorder order by status.sortorder isnull() ACCOUNT PAYMENT PAYMENT_STATUS ACCOUNT_TYPE ORGANIZATION ORG_USER select account, payment from Account as account left outer join account.payments as payment where :currentuser in elements(account.holder.users) and PaymentStatus.UNPAID = isnull(payment.currentstatus.name, PaymentStatus.UNPAID) order by account.type.sortorder, account.accountnumber, payment.duedate select account, payment

110 from Account as account join account.holder.users as user left outer join account.payments as payment where :currentuser = user and PaymentStatus.UNPAID = isnull(payment.currentstatus.name, PaymentStatus.UNPAID) order by account.type.sortorder, account.accountnumber, payment.duedate ( (Integer) session.iterate("select count(*) from...").next() ).intvalue() select usr.id, usr.name from User as usr left join usr.messages as msg group by usr.id, usr.name order by count(msg) from User usr where size(usr.messages) >= 1 select usr.id, usr.name from User usr.name join usr.messages msg group by usr.id, usr.name having count(msg) >= 1 User select usr.id, usr.name from User as usr left join usr.messages as msg group by usr.id, usr.name having count(msg) = 0 Query q = s.createquery("from foo in class Foo where foo.name=:name and foo.size=:size"); q.setproperties(foobean); // foobean#getname()#getsize()##### List foos = q.list(); Query Query q = s.createfilter( collection, "" ); // the trivial filter q.setmaxresults(page_size); q.setfirstresult(page_size * pagenumber); List page = q.list();

111 Collection orderedcollection = s.filter( collection, "order by this.amount" ); Collection counts = s.filter( collection, "select this.type, count(this) group by this.type" ); ( (Integer) session.iterate("select count(*) from...").next() ).intvalue();

112 Criteria net.sf.hibernate.criteria SessionCriteria Criteria crit = sess.createcriteria(cat.class); crit.setmaxresults(50); List cats = crit.list(); net.sf.hibernate.expression.criterion net.sf.hibernate.expression.expressioncriterion List cats = sess.createcriteria(cat.class).add( Expression.like("name", "Fritz%") ).add( Expression.between("weight", minweight, maxweight) ).list(); List cats = sess.createcriteria(cat.class).add( Expression.like("name", "Fritz%") ).add( Expression.or( Expression.eq( "age", new Integer(0) ), Expression.isNull("age") ) ).list(); List cats = sess.createcriteria(cat.class).add( Expression.in( "name", new String[] { "Fritz", "Izi", "Pk" ) ).add( Expression.disjunction().add( Expression.isNull("age") ).add( Expression.eq("age", new Integer(0) ) ).add( Expression.eq("age", new Integer(1) ) ).add( Expression.eq("age", new Integer(2) ) ) ) ).list(); Expression List cats = sess.createcriteria(cat.class).add( Expression.sql("lower({alias.name) like lower(?)", "Fritz%", Hibernate.STRING) ).list();

113 {alias net.sf.hibernate.expression.order List cats = sess.createcriteria(cat.class).add( Expression.like("name", "F%").addOrder( Order.asc("name") ).addorder( Order.desc("age") ).setmaxresults(50).list(); createcriteria() List cats = sess.createcriteria(cat.class).add( Expression.like("name", "F%").createCriteria("kittens").add( Expression.like("name", "F%").list(); createcriteria()kittenscriteria List cats = sess.createcriteria(cat.class).createalias("kittens", "kt").createalias("mate", "mt").add( Expression.eqProperty("kt.name", "mt.name") ).list(); createalias()criteria Cat returnmaps() List cats = sess.createcriteria(cat.class).createcriteria("kittens", "kt").add( Expression.eq("name", "F%") ).returnmaps().list(); Iterator iter = cats.iterator(); while ( iter.hasnext() ) { Map map = (Map) iter.next(); Cat cat = (Cat) map.get(criteria.root_alias); Cat kitten = (Cat) map.get("kt");

114 setfetchmode() List cats = sess.createcriteria(cat.class).add( Expression.like("name", "Fritz%") ).setfetchmode("mate", FetchMode.EAGER).setFetchMode("kittens", FetchMode.EAGER).list(); mate kittens net.sf.hibernate.expression.example Cat cat = new Cat(); cat.setsex('f'); cat.setcolor(color.black); List results = session.createcriteria(cat.class).add( Example.create(cat) ).list(); Example Example example = Example.create(cat).excludeZeroes() //##############.excludeproperty("color") //"color"#################.ignorecase() //##########################.enablelike(); //#######like###### List results = session.createcriteria(cat.class).add(example).list(); List results = session.createcriteria(cat.class).add( Example.create(cat) ).createcriteria("mate").add( Example.create( cat.getmate() ) ).list();

115 Query Query Session.createSQLQuery() Query sqlquery = sess.createsqlquery("select {cat.* from cats {cat", "cat", Cat.class); sqlquery.setmaxresults(50); List cats = sqlquery.list(); createsqlquery() CatStringClass {cat.* cat_log Cat String sql = "select cat.originalid as {cat.id, " + " cat.mateid as {cat.mate, cat.sex as {cat.sex, " + " cat.weight*10 as {cat.weight, cat.name as {cat.name" + " from cat_log cat where {cat.mate = :catid" List loggedcats = sess.createsqlquery(sql, "cat", Cat.class).setLong("catId", catid).list();

116 List people = sess.getnamedquery("mysqlquery").setmaxresults(50).list(); <sql-query name="mysqlquery"> <return alias="person" class="eg.person"/> SELECT {person.name AS {person.name, {person.age AS {person.age, {person.sex AS {person.sex FROM PERSON {person WHERE {person.name LIKE 'Hiber%' </sql-query>

117 <key> <index> <key> SchemaExport<set> not-null="true" DELETE

118 SetSet UPDATEINSERT DELETE <idbag> inverse="true" Collection.add() Collection.addAll()SetList Parent p = (Parent) sess.load(parent.class, id); Child c = new Child(); c.setparent(p); p.getchildren().add(c); //###################### sess.flush(); list.clear() DELETE INSERTDELETE

119 DELETE Session <class name="eg.order" proxy="eg.order"> Order <class name="eg.cat" proxy="eg.cat">... <subclass name="eg.domesticcat" proxy="eg.domesticcat">... </subclass> </class> CatDomesticCat DomesticCat Cat cat = (Cat) session.load(cat.class, id); // instantiate a proxy (does not hit the db) if ( cat.isdomesticcat() ) { // #############db####### DomesticCat dc = (DomesticCat) cat; // ####... ==

120 Cat cat = (Cat) session.load(cat.class, id); DomesticCat dc = (DomesticCat) session.load(domesticcat.class, id); System.out.println(cat==dc); // Cat######## // ###DomesticCat###! // false cat.setweight(11.0); // #############db####### System.out.println( dc.getweight() ); // 11.0 finalfinal <class name="eg.cat" proxy="eg.icat">... <subclass name="eg.domesticcat" proxy="eg.idomesticcat">... </subclass> </class> CatICatDomesticCatIDomesticCat CatDomesticCatload() iterate()find() ICat cat = (ICat) session.load(cat.class, catid); Iterator iter = session.iterate("from cat in class eg.cat where cat.name='fritz'"); ICat fritz = (ICat) iter.next(); Cat ICat equals()equals() hashcode()hashcode() equals() hashcode() LazyInitializationException Session cat.getsex() cat.getkittens().size()

121 Hibernate.initialize() Hibernate.isInitialized() Hibernate.initialize(cat)Sessioncat Hibernate.initialize( cat.getkittens() ) SessionCatCat PersonownerPerson lazy="true"getowner() SELECT Personbatch-size <class name="person" lazy="true" batch-size="10">...</class> Session PersonCat PersonSessionPerson getcats()selectperson cats <class name="person"> <set name="cats" lazy="true" batch-size="3">... </set> </class> batch-sizeselect Session Session SessionFactory

122 hibernate.cache.provider_class net.sf.hibernate.cache.cacheprovider net.sf.hibernate.cache.hashtablecacheprovider net.sf.hibernate.cache.ehcacheprovider net.sf.hibernate.cache.oscacheprovider net.sf.hibernate.cache.swarmcacheprovider net.sf.hibernate.cache.treecacheprovider <cache> <cache usage="transactional read-write nonstrict-read-write read-only" (1) /> (1) usage transactional read-write nonstrict-read-write read-only <class-cache><collection-cache>hibernate.cfg.xml usage

123 read-only <class name="eg.immutable" mutable="false"> <cache usage="read-only"/>... </class> read-write TransactionManagerhibernate.transaction.manager_lookup_class Session.close() Session.disconnect() <class name="eg.cat"... > <cache usage="read-write"/>... <set name="kittens"... > <cache usage="read-write"/>... </set> </class> nonstrict-read-write hibernate.transaction.manager_lookup_class Session.close() Session.disconnect() transactional hibernate.transaction.manager_lookup_class

124 Session save() update() saveorupdate() load() find() iterate() filter() Sessionflush() evict() Iterator cats = sess.iterate("from eg.cat as cat"); //########## while ( cats.hasnext() ) { Cat cat = (Cat) iter.next(); dosomethingwithacat(cat); sess.evict(cat); cascade="all" cascade="all-delete-orphan" Session contains() Session.clear() SessionFactory hibernate.cache.use_query_cache=true net.sf.hibernate.cache.querycache net.sf.hibernate.cache.updatetimestampscache

125 Query.setCacheable(true) Query.setCacheRegion() List blogs = sess.createquery("from Blog blog where blog.blogger = :blogger").setentity("blogger", blogger).setmaxresults(15).setcacheable(true).setcacheregion("frontpages").list(); Query.setForceCacheRefresh()true

126 SchemaExport hbm2ddl CodeGenerator hbm2java MapGenerator class2hbm ddl2hbm hibernate-x.x.x/bin hibernate.dialect## length

127 not-nullnot NULLunique UNIQUE indexunique-key unique-key <property name="foo" type="string" length="64" not-null="true"/> <many-to-one name="bar" foreign-key="fk_foo_bar" not-null="true"/> <element column="serial_number" type="long" not-null="true" unique="true"/> <column> <property name="foo" type="string"> <column name="foo" length="64" not-null="true" sql-type="text"/> </property> <property name="bar" type="my.customtypes.multicolumntype"/> <column name="fee" not-null="true" index="bar_idx"/> <column name="fi" not-null="true" index="bar_idx"/> <column name="fo" not-null="true" index="bar_idx"/> </property> sql-type check <property name="foo" type="integer"> <column name="foo" check="foo > 10"/> </property> <class name="foo" table="foos" check="bar < 100.0">... <property name="bar" type="float"/> </class> length not-null true false unique true false index index_name unique-key unique_key_name foreign-key foreign_key_name inverse="true"

128 SchemaExport sql-type column_type <column> check SchemaExport java -cp net.sf.hibernate.tool.hbm2ddl.schemaexport SchemaExport --quiet --drop --text --output=my_schema.ddl --config=hibernate.cfg.xml --properties=hibernate.properties --format --delimiter=x SchemaExport Configuration cfg =...; new SchemaExport(cfg).create(false, true); -D hibernate.properties --properties

129 hibernate.connection.driver_class hibernate.connection.url hibernate.connection.username hibernate.connection.password hibernate.dialect SchemaExport <target name="schemaexport"> <taskdef name="schemaexport" classname="net.sf.hibernate.tool.hbm2ddl.schemaexporttask" classpathref="class.path"/> <schemaexport properties="hibernate.properties" quiet="no" text="no" drop="no" delimiter=";" output="schema-export.sql"> <fileset dir="src"> <include name="**/*.hbm.xml"/> </fileset> </schemaexport> </target> ##########SchemaExportTask hibernate.* SchemaUpdateSchemaUpdate java -cp net.sf.hibernate.tool.hbm2ddl.schemaupdate SchemaUpdate --quiet

130 --properties=hibernate.properties SchemaUpdate Configuration cfg =...; new SchemaUpdate(cfg).execute(false); SchemaUpdate <target name="schemaupdate"> <taskdef name="schemaupdate" classname="net.sf.hibernate.tool.hbm2ddl.schemaupdatetask" classpathref="class.path"/> <schemaupdate properties="hibernate.properties" quiet="no"> <fileset dir="src"> <include name="**/*.hbm.xml"/> </fileset> </schemaupdate> </target> hbm2java hbm2java.hbm java -cp net.sf.hibernate.tool.hbm2java.codegenerator --output= --config= <meta><meta>

131 <codegen> <meta attribute="implements">codegen.test.iauditable</meta> <generate renderer="net.sf.hibernate.tool.hbm2java.basicrenderer"/> <generate package="autofinders.only" suffix="finder" renderer="net.sf.hibernate.tool.hbm2java.finderrenderer"/> </codegen>.hbm Foo.java FooFinder.java <generate><param> generate-concrete-empty-classes <codegen> <generate prefix="base" renderer="net.sf.hibernate.tool.hbm2java.basicrenderer"/> <generate renderer="net.sf.hibernate.tool.hbm2java.basicrenderer"> <param name="generate-concrete-empty-classes">true</param> <param name="baseclass-prefix">base</param> </generate> </codegen> ## <meta>hbm.xml hbm2java<meta> <class name="person"> <meta attribute="class-description"> Javadoc for the Person Frodo </meta> <meta attribute="implements">iauditable</meta>

132 <id name="id" type="long"> <meta attribute="scope-set">protected</meta> <generator class="increment"/> </id> <property name="name" type="string"> <meta attribute="field-description">the name of the person</meta> </property> </class> // default package import java.io.serializable; import org.apache.commons.lang.builder.equalsbuilder; import org.apache.commons.lang.builder.hashcodebuilder; import org.apache.commons.lang.builder.tostringbuilder; /** * Javadoc for the Person class Frodo * */ public class Person implements Serializable, IAuditable { /** identifier field */ public Long id; /** nullable persistent field */ public String name; /** full constructor */ public Person(java.lang.String name) { this.name = name; /** default constructor */ public Person() { public java.lang.long getid() { return this.id; protected void setid(java.lang.long id) { this.id = id; /** * The name of the person */ public java.lang.string getname() { return this.name; public void setname(java.lang.string name) { this.name = name; class-description

133 field-description interface implements extends generated-class scope-class scope-set scope-get scope-field use-in-tostring implement-equals use-in-equals bound constrained gen-property property-type class-code extra-import finder-method session-method tostring() equals() hashcode() equals() hashcode() <meta>hbm.xml IAuditable hbm.xml <hibernate-mapping> <meta attribute="imp lements">iauditable</meta>hbm.xml IAuditable

134 <meta> <class><meta attribute="scope-field">protected</meta> <meta>inherit="false" <meta attribute="scope-class" inherit="false">public abstract</meta> hbm2java hbm.xml <property name="name" column="name" type="string"> <meta attribute="finder-method">findbyname</meta> </property> <codegen> <generate renderer="net.sf.hibernate.tool.hbm2java.basicrenderer"/> <generate suffix="finder" renderer="net.sf.hibernate.tool.hbm2java.finderrenderer"/> </codegen> hbm2java --config=xxx.xmlxxx.xml <meta attribute="session-method"> com.whatever.sessiontable.getsessiontable().getsession(); </meta> <codegen> <generate renderer="net.sf.hibernate.tool.hbm2java.velocityrenderer"> <param name="template">pojo.vm</param> </generate> </codegen>

135 template./tools/src/velocity pojo.vm ## MapGenerator MapGenerator uid UID id ID key KEY pk PK void setgetis

136 Hibernate.basic() hibernate.type.type PersistentEnum MapGenerator java.util.list java.util.map java.util.set MapGenerator MapGenerator many-to-one component java -cp net.sf.hibernate.tool.class2hbm.mapgenerator --interact XXX uid=xxx --quiet --setuid=uid --adduid=uid --select= --depth=<small-int>

137 --output=my_mapping.xml --abstract= Animal-->Mammal-->Human Animal-->Mammal-->Marsupial-->Kangaroo --abstractanimal MammalabstractHuman Marsupial<class> Marsupialabstract KangarooMarsupial

138 ##<one-to-many> ## #<composite-element> ParentChild<one-to-many> <set name="children"> <key column="parent_id"/> <one-to-many class="child"/> </set> Parent p =...; Child c = new Child(); p.getchildren().add(c);

139 session.save(c); session.flush(); cinsert pcupdate parent_idnot NULL pcparent_idchild INSERT <many-to-one name="parent" column="parent_id" not-null="true"/> Childparent Child inverse <set name="children" inverse="true"> <key column="parent_id"/> <one-to-many class="child"/> </set> Child Parent p = (Parent) session.load(parent.class, pid); Child c = new Child(); c.setparent(p); p.getchildren().add(c); session.save(c); session.flush(); INSERT ParentaddChild() public void addchild(child c) { c.setparent(this); children.add(c); Child Parent p = (Parent) session.load(parent.class, pid); Child c = new Child(); p.addchild(c); session.save(c); session.flush();

140 save() <set name="children" inverse="true" cascade="all"> <key column="parent_id"/> <one-to-many class="child"/> </set> Parent p = (Parent) session.load(parent.class, pid); Child c = new Child(); p.addchild(c); session.flush(); Parent p Parent p = (Parent) session.load(parent.class, pid); session.delete(p); session.flush(); cp NOT NULL Parent p = (Parent) session.load(parent.class, pid); Child c = (Child) p.getchildren().iterator().next(); p.getchildren().remove(c); c.setparent(null); session.flush(); delete() Child Parent p = (Parent) session.load(parent.class, pid); Child c = (Child) p.getchildren().iterator().next(); p.getchildren().remove(c); session.delete(c); session.flush(); Child Child cascade="all-delete-orphan" <set name="children" inverse="true" cascade="all-delete-orphan"> <key column="parent_id"/> <one-to-many class="child"/> </set> inverse="true" setparent() update() ParentSession update()parent

141 ParentChild java.lang.long unsaved-value unsaved-value Long Child <id name="id" type="long" unsaved-value="0"> unsaved-value parentchildnewchild //parent#child#######session##########n parent.addchild(child); Child newchild = new Child(); parent.addchild(newchild); session.update(parent); session.flush(); unsaved-value <version>unsaved-value="null"unsaved-value="negative" <timestamp> unsaved-value="none"update(parent) save() unsaved-value="any"update(parent) update() noneunsaved-value isunsaved()interceptor public class Persistent { private boolean _saved = false; public void onsave() { _saved=true; public void onload() { _saved=true;... public boolean issaved() { return _saved;

142 savedonload() onsave() isunsaved() public Boolean isunsaved(object entity) { if (entity instanceof Persistent) { return new Boolean(!( (Persistent) entity ).issaved() ); else { return null; public boolean onload(object entity, Serializable id, Object[] state, String[] propertynames, Type[] types) { if (entity instanceof Persistent) ( (Persistent) entity ).onload(); return false; public boolean onsave(object entity, Serializable id, Object[] state, String[] propertynames, Type[] types) { if (entity instanceof Persistent) ( (Persistent) entity ).onsave(); return false; <composite-element> <idbag>

143 package eg; import java.util.list; public class Blog { private Long _id; private String _name; private List _items; public Long getid() { return _id; public List getitems() { return _items; public String getname() { return _name; public void setid(long long1) { _id = long1; public void setitems(list list) { _items = list; public void setname(string string) { _name = string; package eg; import java.text.dateformat; import java.util.calendar; public class BlogItem { private Long _id; private Calendar _datetime; private String _text; private String _title; private Blog _blog; public Blog getblog() { return _blog; public Calendar getdatetime() { return _datetime; public Long getid() { return _id; public String gettext() { return _text; public String gettitle() { return _title; public void setblog(blog blog) { _blog = blog;

144 public void setdatetime(calendar calendar) { _datetime = calendar; public void setid(long long1) { _id = long1; public void settext(string string) { _text = string; public void settitle(string string) { _title = string; <?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 2.0//EN" " <hibernate-mapping package="eg"> <class name="blog" table="blogs" lazy="true"> <id </id> name="id" column="blog_id"> <generator class="native"/> <property name="name" column="name" not-null="true" unique="true"/> <bag name="items" inverse="true" lazy="true" order-by="date_time" cascade="all"> </bag> </class> </hibernate-mapping> <key column="blog_id"/> <one-to-many class="blogitem"/> <?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 2.0//EN" "

145 <hibernate-mapping package="eg"> <class name="blogitem" table="blog_items" dynamic-update="true"> <id </id> name="id" column="blog_item_id"> <generator class="native"/> <property name="title" column="title" not-null="true"/> <property name="text" column="text" not-null="true"/> <property name="datetime" column="date_time" not-null="true"/> <many-to-one name="blog" column="blog_id" not-null="true"/> </class> </hibernate-mapping> package eg; import java.util.arraylist; import java.util.calendar; import java.util.iterator; import java.util.list; import net.sf.hibernate.hibernateexception; import net.sf.hibernate.query; import net.sf.hibernate.session; import net.sf.hibernate.sessionfactory; import net.sf.hibernate.transaction; import net.sf.hibernate.cfg.configuration; import net.sf.hibernate.tool.hbm2ddl.schemaexport; public class BlogMain { private SessionFactory _sessions; public void configure() throws HibernateException { _sessions = new Configuration().addClass(Blog.class).addClass(BlogItem.class).buildSessionFactory();

146 public void exporttables() throws HibernateException { Configuration cfg = new Configuration().addClass(Blog.class).addClass(BlogItem.class); new SchemaExport(cfg).create(true, true); public Blog createblog(string name) throws HibernateException { Blog blog = new Blog(); blog.setname(name); blog.setitems( new ArrayList() ); Session session = _sessions.opensession(); Transaction tx = null; try { tx = session.begintransaction(); session.save(blog); tx.commit(); catch (HibernateException he) { if (tx!=null) tx.rollback(); throw he; finally { session.close(); return blog; public BlogItem createblogitem(blog blog, String title, String text) throws HibernateException { BlogItem item = new BlogItem(); item.settitle(title); item.settext(text); item.setblog(blog); item.setdatetime( Calendar.getInstance() ); blog.getitems().add(item); Session session = _sessions.opensession(); Transaction tx = null; try { tx = session.begintransaction(); session.update(blog); tx.commit(); catch (HibernateException he) { if (tx!=null) tx.rollback(); throw he; finally { session.close(); return item; public BlogItem createblogitem(long blogid, String title, String text) throws HibernateException { BlogItem item = new BlogItem(); item.settitle(title); item.settext(text); item.setdatetime( Calendar.getInstance() ); Session session = _sessions.opensession(); Transaction tx = null; try { tx = session.begintransaction();

147 Blog blog = (Blog) session.load(blog.class, blogid); item.setblog(blog); blog.getitems().add(item); tx.commit(); catch (HibernateException he) { if (tx!=null) tx.rollback(); throw he; finally { session.close(); return item; public void updateblogitem(blogitem item, String text) throws HibernateException { item.settext(text); Session session = _sessions.opensession(); Transaction tx = null; try { tx = session.begintransaction(); session.update(item); tx.commit(); catch (HibernateException he) { if (tx!=null) tx.rollback(); throw he; finally { session.close(); public void updateblogitem(long itemid, String text) throws HibernateException { Session session = _sessions.opensession(); Transaction tx = null; try { tx = session.begintransaction(); BlogItem item = (BlogItem) session.load(blogitem.class, itemid); item.settext(text); tx.commit(); catch (HibernateException he) { if (tx!=null) tx.rollback(); throw he; finally { session.close(); public List listallblognamesanditemcounts(int max) throws HibernateException { Session session = _sessions.opensession(); Transaction tx = null; List result = null; try { tx = session.begintransaction(); Query q = session.createquery( "select blog.id, blog.name, count(blogitem) " + "from Blog as blog " + "left outer join blog.items as blogitem " + "group by blog.name, blog.id " + "order by max(blogitem.datetime)" );

148 q.setmaxresults(max); result = q.list(); tx.commit(); catch (HibernateException he) { if (tx!=null) tx.rollback(); throw he; finally { session.close(); return result; public Blog getblogandallitems(long blogid) throws HibernateException { Session session = _sessions.opensession(); Transaction tx = null; Blog blog = null; try { tx = session.begintransaction(); Query q = session.createquery( "from Blog as blog " + "left outer join fetch blog.items " + "where blog.id = :blogid" ); q.setparameter("blogid", blogid); blog = (Blog) q.list().get(0); tx.commit(); catch (HibernateException he) { if (tx!=null) tx.rollback(); throw he; finally { session.close(); return blog; public List listblogsandrecentitems() throws HibernateException { Session session = _sessions.opensession(); Transaction tx = null; List result = null; try { tx = session.begintransaction(); Query q = session.createquery( "from Blog as blog " + "inner join blog.items as blogitem " + "where blogitem.datetime > :mindate" ); Calendar cal = Calendar.getInstance(); cal.roll(calendar.month, false); q.setcalendar("mindate", cal); result = q.list(); tx.commit(); catch (HibernateException he) { if (tx!=null) tx.rollback(); throw he; finally { session.close(); return result;

149 Employer Employee Employment <hibernate-mapping> <class name="employer" table="employers"> <id name="id"> <generator class="sequence"> <param name="sequence">employer_id_seq</param> </generator> </id> <property name="name"/> </class> <class name="employment" table="employment_periods"> <id name="id"> <generator class="sequence"> <param name="sequence">employment_id_seq</param> </generator> </id> <property name="startdate" column="start_date"/> <property name="enddate" column="end_date"/> <component name="hourlyrate" class="monetoryamount"> <property name="amount"> <column name="hourly_rate" sql-type="numeric(12, 2)"/> </property> <property name="currency" length="12"/> </component> <many-to-one name="employer" column="employer_id" not-null="true"/> <many-to-one name="employee" column="employee_id" not-null="true"/> </class>

150 <class name="employee" table="employees"> <id name="id"> <generator class="sequence"> <param name="sequence">employee_id_seq</param> </generator> </id> <property name="taxfilenumber"/> <component name="name" class="name"> <property name="firstname"/> <property name="initial"/> <property name="lastname"/> </component> </class> </hibernate-mapping> SchemaExport create table employers ( id BIGINT not null, name VARCHAR(255), primary key (id) ) create table employment_periods ( id BIGINT not null, hourly_rate NUMERIC(12, 2), currency VARCHAR(12), employee_id BIGINT not null, employer_id BIGINT not null, end_date TIMESTAMP, start_date TIMESTAMP, primary key (id) ) create table employees ( id BIGINT not null, firstname VARCHAR(255), initial CHAR(1), lastname VARCHAR(255), taxfilenumber VARCHAR(255), primary key (id) ) alter table employment_periods add constraint employment_periodsfk0 foreign key (employer_id) references employers alter table employment_periods add constraint employment_periodsfk1 foreign key (employee_id) references employees create sequence employee_id_seq create sequence employment_id_seq create sequence employer_id_seq Work Author Person Work Author Author Person Author Person

151 <hibernate-mapping> <class name="work" table="works" discriminator-value="w"> <id name="id" column="id"> <generator class="native"/> </id> <discriminator column="type" type="character"/> <property name="title"/> <set name="authors" table="author_work" lazy="true"> <key> <column name="work_id" not-null="true"/> </key> <many-to-many class="author"> <column name="author_id" not-null="true"/> </many-to-many> </set> <subclass name="book" discriminator-value="b"> <property name="text"/> </subclass> <subclass name="song" discriminator-value="s"> <property name="tempo"/> <property name="genre"/> </subclass> </class> <class name="author" table="authors"> <id name="id" column="id"> <!-- The Author must have the same identifier as the Person --> <generator class="assigned"/> </id> <property name="alias"/> <one-to-one name="person" constrained="true"/> <set name="works" table="author_work" inverse="true" lazy="true"> <key column="author_id"/> <many-to-many class="work" column="work_id"/>

152 </set> </class> <class name="person" table="persons"> <id name="id" column="id"> <generator class="native"/> </id> <property name="name"/> </class> </hibernate-mapping> works authors persons author_work SchemaExport create table works ( id BIGINT not null generated by default as identity, tempo FLOAT, genre VARCHAR(255), text INTEGER, title VARCHAR(255), type CHAR(1) not null, primary key (id) ) create table author_work ( author_id BIGINT not null, work_id BIGINT not null, primary key (work_id, author_id) ) create table authors ( id BIGINT not null generated by default as identity, alias VARCHAR(255), primary key (id) ) create table persons ( id BIGINT not null generated by default as identity, name VARCHAR(255), primary key (id) ) alter table authors add constraint authorsfk0 foreign key (id) references persons alter table author_work add constraint author_workfk0 foreign key (author_id) references authors alter table author_work add constraint author_workfk1 foreign key (work_id) references works Customer Order LineItem Product Customer Order Order LineItem Product Order Product LineItem

153 <hibernate-mapping> <class name="customer" table="customers"> <id name="id"> <generator class="native"/> </id> <property name="name"/> <set name="orders" inverse="true" lazy="true"> <key column="customer_id"/> <one-to-many class="order"/> </set> </class> <class name="order" table="orders"> <id name="id"> <generator class="native"/> </id> <property name="date"/> <many-to-one name="customer" column="customer_id"/> <list name="lineitems" table="line_items" lazy="true"> <key column="order_id"/> <index column="line_number"/> <composite-element class="lineitem"> <property name="quantity"/> <many-to-one name="product" column="product_id"/> </composite-element> </list> </class> <class name="product" table="products"> <id name="id"> <generator class="native"/> </id> <property name="serialnumber"/> </class> </hibernate-mapping> customers orders line_items products line_items create table customers ( id BIGINT not null generated by default as identity, name VARCHAR(255), primary key (id) ) create table orders ( id BIGINT not null generated by default as identity, customer_id BIGINT, date TIMESTAMP, primary key (id) ) create table line_items (

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 @ Lesson 2... ( ). ( ). @ vs. logic data method variable behavior attribute method field Flow (Type), ( ) member @ () : C program Method A ( ) Method B ( ) Method C () program : Java, C++, C# data @ Program

More information

07 자바의 다양한 클래스.key

07 자바의 다양한 클래스.key [ 07 ] . java.lang Object, Math, String, StringBuffer Byte, Short, Integer, Long, Float, Double, Boolean, Character. java.util Random, StringTokenizer Calendar, GregorianCalendar, Date. Collection, List,

More information

@OneToOne(cascade = = "addr_id") private Addr addr; public Emp(String ename, Addr addr) { this.ename = ename; this.a

@OneToOne(cascade = = addr_id) private Addr addr; public Emp(String ename, Addr addr) { this.ename = ename; this.a 1 대 1 단방향, 주테이블에외래키실습 http://ojcedu.com, http://ojc.asia STS -> Spring Stater Project name : onetoone-1 SQL : JPA, MySQL 선택 http://ojc.asia/bbs/board.php?bo_table=lecspring&wr_id=524 ( 마리아 DB 설치는위 URL

More information

Spring Data JPA Many To Many 양방향 관계 예제

Spring Data JPA Many To Many 양방향 관계 예제 Spring Data JPA Many To Many 양방향관계예제 오라클자바커뮤니티 (ojc.asia, ojcedu.com) 엔티티매핑 (Entity Mapping) M : N 연관관계 사원 (Sawon), 취미 (Hobby) 는다 : 다관계이다. 사원은여러취미를가질수있고, 하나의취미역시여러사원에할당될수있기때문이다. 보통관계형 DB 에서는다 : 다관계는 1

More information

10.ppt

10.ppt : SQL. SQL Plus. JDBC. SQL >> SQL create table : CREATE TABLE ( ( ), ( ),.. ) SQL >> SQL create table : id username dept birth email id username dept birth email CREATE TABLE member ( id NUMBER NOT NULL

More information

I. Installation Install a Hibernate Plugin... 2 II. Hibernate Configuration DataSource 속성정의 Generated SQL 속성정의..

I. Installation Install a Hibernate Plugin... 2 II. Hibernate Configuration DataSource 속성정의 Generated SQL 속성정의.. Anyframe Hibernate Plugin Version 4.6.1 저작권 2007-2010 삼성 SDS 본문서의저작권은삼성 SDS 에있으며 Anyframe 오픈소스커뮤니티활동의목적하에서자유로운이용이가능합니다. 본문서를복제, 배포할경우에는저작권자를명시하여주시기바라며본문서를변경하실경우에는원문과변경된내용을표시하여주시기바랍니다. 원문과변경된문서에대한상업적용도의활용은허용되지않습니다.

More information

Modern Javascript

Modern Javascript ES6 - Arrow Function Class Template String Destructuring Default, Rest, Spread let, const for..of Promises Module System Map, Set * Generator * Symbol * * https://babeljs.io/ Babel is a JavaScript compiler.

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 @ Lesson 3 if, if else, if else if, switch case for, while, do while break, continue : System.in, args, JOptionPane for (,, ) @ vs. logic data method variable Data Data Flow (Type), ( ) @ Member field

More information

I T C o t e n s P r o v i d e r h t t p : / / w w w. h a n b i t b o o k. c o. k r

I T C o t e n s P r o v i d e r h t t p : / / w w w. h a n b i t b o o k. c o. k r I T C o t e n s P r o v i d e r h t t p : / / w w w. h a n b i t b o o k. c o. k r I T C o t e n s P r o v i d e r h t t p : / / w w w. h a n b i t b o o k. c o. k r Jakarta is a Project of the Apache

More information

5장.key

5장.key JAVA Programming 1 (inheritance) 2!,!! 4 3 4!!!! 5 public class Person {... public class Student extends Person { // Person Student... public class StudentWorker extends Student { // Student StudentWorker...!

More information

Connection 8 22 UniSQLConnection / / 9 3 UniSQL OID SET

Connection 8 22 UniSQLConnection / / 9 3 UniSQL OID SET 135-080 679-4 13 02-3430-1200 1 2 11 2 12 2 2 8 21 Connection 8 22 UniSQLConnection 8 23 8 24 / / 9 3 UniSQL 11 31 OID 11 311 11 312 14 313 16 314 17 32 SET 19 321 20 322 23 323 24 33 GLO 26 331 GLO 26

More information

ilist.add(new Integer(1))과 같이 사용하지 않고 ilist.add(1)과 같이 사용한 것은 자바 5.0에 추가된 기본 자료형과 해당 객체 자료 형과의 오토박싱/언박싱 기능을 사용한 것으로 오토박싱이란 자바 컴파일러가 객체를 요구하는 곳에 기본 자료형

ilist.add(new Integer(1))과 같이 사용하지 않고 ilist.add(1)과 같이 사용한 것은 자바 5.0에 추가된 기본 자료형과 해당 객체 자료 형과의 오토박싱/언박싱 기능을 사용한 것으로 오토박싱이란 자바 컴파일러가 객체를 요구하는 곳에 기본 자료형 바에 제네릭스(generics)를 도입하기 위한 연구는 이미 8년 전인 1996년부터라고 한다. 실제로 자바에 제네릭스를 도입하 는 몇 가지 방안들이 논문으로 나오기 시작한 것이 1998년 초임을 감 안하면 무려 8년이 지난 후에야 자바 5.0에 전격 채택되었다는 것은 이것이 얼마나 어려운 일이었나 하는 것을 보여준다. 자바의 스펙을 결정하는 표준화 절차인

More information

11 템플릿적용 - Java Program Performance Tuning (김명호기술이사)

11 템플릿적용 - Java Program Performance Tuning (김명호기술이사) Java Program Performance Tuning ( ) n (Primes0) static List primes(int n) { List primes = new ArrayList(n); outer: for (int candidate = 2; n > 0; candidate++) { Iterator iter = primes.iterator(); while

More information

thesis

thesis ( Design and Implementation of a Generalized Management Information Repository Service for Network and System Management ) ssp@nile nile.postech.ac..ac.kr DPE Lab. 1997 12 16 GMIRS GMIRS GMIRS prototype

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 @ Lesson 1,..... @ 1 Green Project 1991 Oak Java 1995. 5 December '90 by Patrick Naughton, Mike Sheridan and James Gosling Embedded in various consumer electronic device 1992. 9. 3 Star 7 1993 www portability

More information

13주-14주proc.PDF

13주-14주proc.PDF 12 : Pro*C/C++ 1 2 Embeded SQL 3 PRO *C 31 C/C++ PRO *C NOT! NOT AND && AND OR OR EQUAL == = SQL,,, Embeded SQL SQL 32 Pro*C C SQL Pro*C C, C Pro*C, C C 321, C char : char[n] : n int, short, long : float

More information

DocsPin_Korean.pages

DocsPin_Korean.pages Unity Localize Script Service, Page 1 Unity Localize Script Service Introduction Application Game. Unity. Google Drive Unity.. Application Game. -? ( ) -? -?.. 준비사항 Google Drive. Google Drive.,.. - Google

More information

ALTIBASE 사용자가이드 Templete

ALTIBASE 사용자가이드 Templete Real Alternative DBMS ALTIBASE, Since 1999 Hibernate 연동가이드 2014.01 Copyright c 2000~2010 ALTIBASE Corporation. All Rights Reserved. Document Control Change Record Date Author Change Reference 2010-11 snkim

More information

3 S Q L A n t i p a t t e r n s Trees/intro/parent.sql CREATE TABLE Comments ( comment_id SERIAL PRIMARY KEY, parent_id BIGINT UNSIGNED, comment TEXT

3 S Q L A n t i p a t t e r n s Trees/intro/parent.sql CREATE TABLE Comments ( comment_id SERIAL PRIMARY KEY, parent_id BIGINT UNSIGNED, comment TEXT 3 S Q L A n t i p a t t e r n s Trees/intro/parent.sql CREATE TABLE Comments ( comment_id SERIAL PRIMARY KEY, parent_id BIGINT UNSIGNED, comment TEXT NOT NULL, FOREIGN KEY (parent_id) REFERENCES Comments(comment_id)

More information

02 C h a p t e r Java

02 C h a p t e r Java 02 C h a p t e r Java Bioinformatics in J a va,, 2 1,,,, C++, Python, (Java),,, (http://wwwbiojavaorg),, 13, 3D GUI,,, (Java programming language) (Sun Microsystems) 1995 1990 (green project) TV 22 CHAPTER

More information

단계

단계 TIBERO-WAS 연동 Guide 본문서에서는 Tibero RDBMS 에서제공하는 JDBC 통한 JEUS, WEBLOGIC 등다양한 WAS (Web Application Server) 제품과의연동방법을알아본다. Contents 1. Connection Pool 방식... 2 2. JEUS 연동... 3 2.1. JEUSMain.xml 설정 (Thin 방식

More information

untitled

untitled (shared) (integrated) (stored) (operational) (data) : (DBMS) :, (database) :DBMS File & Database - : - : ( : ) - : - : - :, - DB - - -DBMScatalog meta-data -DBMS -DBMS - -DBMS concurrency control E-R,

More information

歯JavaExceptionHandling.PDF

歯JavaExceptionHandling.PDF (2001 3 ) from Yongwoo s Park Java Exception Handling Programming from Yongwoo s Park 1 Java Exception Handling Programming from Yongwoo s Park 2 1 4 11 4 4 try/catch 5 try/catch/finally 9 11 12 13 13

More information

Spring Boot/JDBC JdbcTemplate/CRUD 예제

Spring Boot/JDBC JdbcTemplate/CRUD 예제 Spring Boot/JDBC JdbcTemplate/CRUD 예제 오라클자바커뮤니티 (ojc.asia, ojcedu.com) Spring Boot, Gradle 과오픈소스인 MariaDB 를이용해서 EMP 테이블을만들고 JdbcTemplate, SimpleJdbcTemplate 을이용하여 CRUD 기능을구현해보자. 마리아 DB 설치는다음 URL 에서확인하자.

More information

NoSQL

NoSQL MongoDB Daum Communications NoSQL Using Java Java VM, GC Low Scalability Using C Write speed Auto Sharding High Scalability Using Erlang Read/Update MapReduce R/U MR Cassandra Good Very Good MongoDB Good

More information

자바 프로그래밍

자바 프로그래밍 5 (kkman@mail.sangji.ac.kr) (Class), (template) (Object) public, final, abstract [modifier] class ClassName { // // (, ) Class Circle { int radius, color ; int x, y ; float getarea() { return 3.14159

More information

01-OOPConcepts(2).PDF

01-OOPConcepts(2).PDF Object-Oriented Programming Concepts Tel: 02-824-5768 E-mail: hhcho@selabsoongsilackr? OOP (Object) (Encapsulation) (Message) (Class) (Inheritance) (Polymorphism) (Abstract Class) (Interface) 2 1 + = (Dependency)

More information

교육2 ? 그림

교육2 ? 그림 Interstage 5 Apworks EJB Application Internet Revision History Edition Date Author Reviewed by Remarks 1 2002/10/11 2 2003/05/19 3 2003/06/18 EJB 4 2003/09/25 Apworks5.1 [ Stateless Session Bean ] ApworksJava,

More information

<session-factory> <property name="hibernate.connection.driver_class">oracle.jdbc.driver.oracledriver</property> <property name="hibernate.connection.u

<session-factory> <property name=hibernate.connection.driver_class>oracle.jdbc.driver.oracledriver</property> <property name=hibernate.connection.u JBoss Hibernate Tools 를이용한 Entity 코드생성하기 OOP 개발교육의중심오라클자바커뮤니티 http://ojc.asia DDL 코드가작성되어있거나운영중인서비스를업그레이드하는경우에는 ORM 개발이라고하더라도 Top-down 방식의 개발방법론만을고집하지말고때에따라서는전통적인방식의접근이편리할것이다. 데이터베이스의이미존재하는테이블을바탕으로리버스엔지니어링을통해

More information

FileMaker 15 ODBC 및 JDBC 설명서

FileMaker 15 ODBC 및 JDBC 설명서 FileMaker 15 ODBC JDBC 2004-2016 FileMaker, Inc.. FileMaker, Inc. 5201 Patrick Henry Drive Santa Clara, California 95054 FileMaker FileMaker Go FileMaker, Inc.. FileMaker WebDirect FileMaker, Inc... FileMaker.

More information

FileMaker ODBC 및 JDBC 가이드

FileMaker ODBC 및 JDBC 가이드 FileMaker ODBC JDBC 2004-2019 FileMaker, Inc.. FileMaker, Inc. 5201 Patrick Henry Drive Santa Clara, California 95054 FileMaker, FileMaker Cloud, FileMaker Go FileMaker, Inc.. FileMaker WebDirect FileMaker,

More information

rmi_박준용_final.PDF

rmi_박준용_final.PDF (RMI) - JSTORM http://wwwjstormpekr (RMI)- Document title: Document file name: Revision number: Issued by: Document Information (RMI)- rmi finaldoc Issue Date: Status:

More information

목차 JEUS EJB Session Bean가이드 stateful session bean stateful sample 가이드 sample source 결과확인 http session에

목차 JEUS EJB Session Bean가이드 stateful session bean stateful sample 가이드 sample source 결과확인 http session에 개념정리및샘플예제 EJB stateful sample 문서 2016. 01. 14 목차 JEUS EJB Session Bean가이드... 3 1. stateful session bean... 3 1.1 stateful sample 가이드... 3 1.1.1 sample source... 3 1.1.2 결과확인... 6 1.2 http session에서사용하기...

More information

Java XPath API (한글)

Java XPath API (한글) XML : Elliotte Rusty Harold, Adjunct Professor, Polytechnic University 2006 9 04 2006 10 17 문서옵션 제안및의견 XPath Document Object Model (DOM). XML XPath. Java 5 XPath XML - javax.xml.xpath.,? "?"? ".... 4.

More information

신림프로그래머_클린코드.key

신림프로그래머_클린코드.key CLEAN CODE 6 11st Front Dev. Team 6 1. 2. 3. checked exception 4. 5. 6. 11 : 2 4 : java (50%), javascript (35%), SQL/PL-SQL (15%) : Spring, ibatis, Oracle, jquery ? , (, ) ( ) 클린코드를 무시한다면 . 6 1. ,,,!

More information

MasoJava4_Dongbin.PDF

MasoJava4_Dongbin.PDF JSTORM http://wwwjstormpekr Issued by: < > Revision: Document Information Document title: Document file name: MasoJava4_Dongbindoc Revision number: Issued by: < > SI, dbin@handysoftcokr

More information

Interstage5 SOAP서비스 설정 가이드

Interstage5 SOAP서비스 설정 가이드 Interstage 5 Application Server ( Solaris ) SOAP Service Internet Sample Test SOAP Server Application SOAP Client Application CORBA/SOAP Server Gateway CORBA/SOAP Gateway Client INTERSTAGE SOAP Service

More information

09-interface.key

09-interface.key 9 Database insert(record r): boolean find(key k): Record 1 Record getkey(): Key * Record Key Database.? Key equals(key y): boolean Database insert(record r): boolean find(key k): Record * Database OK 1

More information

I T C o t e n s P r o v i d e r h t t p : / / w w w. h a n b i t b o o k. c o. k r

I T C o t e n s P r o v i d e r h t t p : / / w w w. h a n b i t b o o k. c o. k r I T C o t e n s P r o v i d e r h t t p : / / w w w. h a n b i t b o o k. c o. k r -------------------------------------------------------------------- -- 1. : ts_cre_bonsa.sql -- 2. :

More information

1

1 1 1....6 1.1...6 2. Java Architecture...7 2.1 2SDK(Software Development Kit)...8 2.2 JRE(Java Runtime Environment)...9 2.3 (Java Virtual Machine, JVM)...10 2.4 JVM...11 2.5 (runtime)jvm...12 2.5.1 2.5.2

More information

MS-SQL SERVER 대비 기능

MS-SQL SERVER 대비 기능 Business! ORACLE MS - SQL ORACLE MS - SQL Clustering A-Z A-F G-L M-R S-Z T-Z Microsoft EE : Works for benchmarks only CREATE VIEW Customers AS SELECT * FROM Server1.TableOwner.Customers_33 UNION ALL SELECT

More information

untitled

untitled - -, (insert) (delete) - - (insert) (delete) (top ) - - (insert) (rear) (delete) (front) A A B top A B C top push(a) push(b) push(c) A B top pop() top A B D push(d) top #define MAX_STACK_SIZE 100 int

More information

Mobile Service > IAP > Android SDK [ ] IAP SDK TOAST SDK. IAP SDK. Android Studio IDE Android SDK Version (API Level 10). Name Reference V

Mobile Service > IAP > Android SDK [ ] IAP SDK TOAST SDK. IAP SDK. Android Studio IDE Android SDK Version (API Level 10). Name Reference V Mobile Service > IAP > Android SDK IAP SDK TOAST SDK. IAP SDK. Android Studio IDE 2.3.3 Android SDK Version 2.3.3 (API Level 10). Name Reference Version License okhttp http://square.github.io/okhttp/ 1.5.4

More information

FileMaker ODBC and JDBC Guide

FileMaker ODBC and JDBC Guide FileMaker 13 5 5 5 6 6 6 7 7 8 8 8 8 9 9 10 10 11 11 12 12 12 12 12 12 13 13 14 14 16 16 18 4 19 19 20 20 21 21 21 23 23 23 23 25 26 26 26 26 27 28 28 28 28 29 31 31 32 33 33 33 33 34 34 35 35 35 36 1

More information

歯sql_tuning2

歯sql_tuning2 SQL Tuning (2) SQL SQL SQL Tuning ROW(1) ROW(2) ROW(n) update ROW(2) at time 1 & Uncommitted update ROW(2) at time 2 SQLDBA> @ UTLLOCKT WAITING_SESSION TYPE MODE_REQUESTED MODE_HELD LOCK_ID1

More information

- JPA를사용하는경우의스프링설정파일에다음을기술한다. <bean id="entitymanagerfactory" class="org.springframework.orm.jpa.localentitymanagerfactorybean" p:persistenceunitname=

- JPA를사용하는경우의스프링설정파일에다음을기술한다. <bean id=entitymanagerfactory class=org.springframework.orm.jpa.localentitymanagerfactorybean p:persistenceunitname= JPA 와 Hibernate - 스프링의 JDBC 대신에 JPA를이용한 DB 데이터검색작업 - JPA(Java Persistence API) 는자바의 O/R 매핑에대한표준지침이며, 이지침에따라설계된소프트웨어를 O/R 매핑프레임워크 라고한다. - O/R 매핑 : 객체지향개념인자바와관계개념인 DB 테이블간에상호대응을시켜준다. 즉, 객체지향언어의인스턴스와관계데이터베이스의레코드를상호대응시킨다.

More information

12-file.key

12-file.key 11 (String).. java.lang.stringbuffer. s String s = "abcd"; s = s + "e"; a b c d e a b c d e ,., "910359,, " "910359" " " " " (token) (token),, (delimiter). java.util.stringtokenizer String s = "910359,,

More information

K&R2 Reference Manual 번역본

K&R2 Reference Manual 번역본 typewriter structunion struct union if-else if if else if if else if if if if else else ; auto register static extern typedef void char short int long float double signed unsigned const volatile { } struct

More information

강의 개요

강의 개요 DDL TABLE 을만들자 웹데이터베이스 TABLE 자료가저장되는공간 문자자료의경우 DB 생성시지정한 Character Set 대로저장 Table 생성시 Table 의구조를결정짓는열속성지정 열 (Clumn, Attribute) 은이름과자료형을갖는다. 자료형 : http://dev.mysql.cm/dc/refman/5.1/en/data-types.html TABLE

More information

목차 BUG DEQUEUE 의 WAIT TIME 이 1 초미만인경우, 설정한시간만큼대기하지않는문제가있습니다... 3 BUG [qp-select-pvo] group by 표현식에있는컬럼을참조하는집합연산이존재하지않으면결괏값오류가발생할수있습니다... 4

목차 BUG DEQUEUE 의 WAIT TIME 이 1 초미만인경우, 설정한시간만큼대기하지않는문제가있습니다... 3 BUG [qp-select-pvo] group by 표현식에있는컬럼을참조하는집합연산이존재하지않으면결괏값오류가발생할수있습니다... 4 ALTIBASE HDB 6.5.1.5.10 Patch Notes 목차 BUG-46183 DEQUEUE 의 WAIT TIME 이 1 초미만인경우, 설정한시간만큼대기하지않는문제가있습니다... 3 BUG-46249 [qp-select-pvo] group by 표현식에있는컬럼을참조하는집합연산이존재하지않으면결괏값오류가발생할수있습니다... 4 BUG-46266 [sm]

More information

chap 5: Trees

chap 5: Trees 5. Threaded Binary Tree 기본개념 n 개의노드를갖는이진트리에는 2n 개의링크가존재 2n 개의링크중에 n + 1 개의링크값은 null Null 링크를다른노드에대한포인터로대체 Threads Thread 의이용 ptr left_child = NULL 일경우, ptr left_child 를 ptr 의 inorder predecessor 를가리키도록변경

More information

OCaml

OCaml OCaml 2009.. (khheo@ropas.snu.ac.kr) 1 ML 2 ML OCaml INRIA, France SML Bell lab. & Princeton, USA nml SNU/KAIST, KOREA 3 4 (let) (* ex1.ml *) let a = 10 let add x y = x + y (* ex2.ml *) let sumofsquare

More information

untitled

untitled PowerBuilder 連 Microsoft SQL Server database PB10.0 PB9.0 若 Microsoft SQL Server 料 database Profile MSS 料 (Microsoft SQL Server database interface) 行了 PB10.0 了 Sybase 不 Microsoft 料 了 SQL Server 料 PB10.0

More information

Chap7.PDF

Chap7.PDF Chapter 7 The SUN Intranet Data Warehouse: Architecture and Tools All rights reserved 1 Intranet Data Warehouse : Distributed Networking Computing Peer-to-peer Peer-to-peer:,. C/S Microsoft ActiveX DCOM(Distributed

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 @ Lesson 4 (Object) (Class) (Instance) (Method) (Constructor) Memory 1 UML 1 @ & 1 (Real World) (Software World) @ &.. () () @ & 2 (Real World) (Software World) OOA/ Modeling Abstraction Instantiation

More information

03-JAVA Syntax(2).PDF

03-JAVA Syntax(2).PDF JAVA Programming Language Syntax of JAVA (literal) (Variable and data types) (Comments) (Arithmetic) (Comparisons) (Operators) 2 HelloWorld application Helloworldjava // class HelloWorld { //attribute

More information

fundamentalOfCommandPattern_calmglow_pattern_jstorm_1.0_f…

fundamentalOfCommandPattern_calmglow_pattern_jstorm_1.0_f… Command JSTORM http://www.jstorm.pe.kr Command Issued by: < > Revision: Document Information Document title: Command Document file name: Revision number: Issued by: Issue

More information

04장

04장 20..29 1: PM ` 199 ntech4 C9600 2400DPI 175LPI T CHAPTER 4 20..29 1: PM ` 200 ntech4 C9600 2400DPI 175LPI T CHAPTER 4.1 JSP (Comment) HTML JSP 3 home index jsp HTML JSP 15 16 17 18 19 20

More information

FileMaker ODBC and JDBC Guide

FileMaker ODBC and JDBC Guide FileMaker 14 5 5 5 5 6 6 6 7 7 7 8 8 8 9 9 10 10 11 11 12 12 12 12 12 13 13 14 15 16 17 18 18 19 19 20 20 20 21 21 21 22 22 22 22 23 24 24 24 24 25 27 27 28 29 29 29 29 30 30 31 31 31 32 1 1 1 1 1 1 1

More information

TITLE

TITLE CSED421 Database Systems Lab MySQL Basic Syntax SQL DML & DDL Data Manipulation Language SELECT UPDATE DELETE INSERT INTO Data Definition Language CREATE DATABASE ALTER DATABASE CREATE TABLE ALTER TABLE

More information

Microsoft PowerPoint - lec2.ppt

Microsoft PowerPoint - lec2.ppt 2008 학년도 1 학기 상지대학교컴퓨터정보공학부 고광만 강의내용 어휘구조 토큰 주석 자료형기본자료형 참조형배열, 열거형 2 어휘 (lexicon) 어휘구조와자료형 프로그램을구성하는최소기본단위토큰 (token) 이라부름문법적으로의미있는최소의단위컴파일과정의어휘분석단계에서처리 자료형 자료객체가갖는형 구조, 개념, 값, 연산자를정의 3 토큰 (token) 정의문법적으로의미있는최소의단위예,

More information

C# Programming Guide - Types

C# Programming Guide - Types C# Programming Guide - Types 최도경 lifeisforu@wemade.com 이문서는 MSDN 의 Types 를요약하고보충한것입니다. http://msdn.microsoft.com/enus/library/ms173104(v=vs.100).aspx Types, Variables, and Values C# 은 type 에민감한언어이다. 모든

More information

초보자를 위한 C# 21일 완성

초보자를 위한 C# 21일 완성 C# 21., 21 C#., 2 ~ 3 21. 2 ~ 3 21.,. 1~ 2 (, ), C#.,,.,., 21..,.,,, 3. A..,,.,.. Q&A.. 24 C#,.NET.,.,.,. Visual C# Visual Studio.NET,..,. CD., www. TeachYour sel f CSharp. com., ( )., C#.. C# 1, 1. WEEK

More information

untitled

untitled Push... 2 Push... 4 Push... 5 Push... 13 Push... 15 1 FORCS Co., LTD A Leader of Enterprise e-business Solution Push (Daemon ), Push Push Observer. Push., Observer. Session. Thread Thread. Observer ID.

More information

자바GUI실전프로그래밍2_장대원.PDF

자바GUI실전프로그래밍2_장대원.PDF JAVA GUI - 2 JSTORM http://wwwjstormpekr JAVA GUI - 2 Issued by: < > Document Information Document title: JAVA GUI - 2 Document file name: Revision number: Issued by: Issue Date:

More information

11강-힙정렬.ppt

11강-힙정렬.ppt 11 (Heap ort) leejaku@shinbiro.com Topics? Heap Heap Opeations UpHeap/Insert, DownHeap/Extract Binary Tree / Index Heap ort Heap ort 11.1 (Priority Queue) Operations ? Priority Queue? Priority Queue tack

More information

03장.스택.key

03장.스택.key ---------------- DATA STRUCTURES USING C ---------------- 03CHAPTER 1 ? (stack): (LIFO:Last-In First-Out) 2 : top : ( index -1 ),,, 3 : ( ) ( ) -> ->. ->.... 4 Stack ADT : (LIFO) : init():. is_empty():

More information

Analytics > Log & Crash Search > Unity ios SDK [Deprecated] Log & Crash Unity ios SDK. TOAST SDK. Log & Crash Unity SDK Log & Crash Search. Log & Cras

Analytics > Log & Crash Search > Unity ios SDK [Deprecated] Log & Crash Unity ios SDK. TOAST SDK. Log & Crash Unity SDK Log & Crash Search. Log & Cras Analytics > Log & Crash Search > Unity ios SDK [Deprecated] Log & Crash Unity ios SDK. TOAST SDK. Log & Crash Unity SDK Log & Crash Search. Log & Crash Unity SDK... Log & Crash Search. - Unity3D v4.0 ios

More information

03장

03장 CHAPTER3 ( ) Gallery 67 68 CHAPTER 3 Intent ACTION_PICK URI android provier MediaStore Images Media EXTERNAL_CONTENT_URI URI SD MediaStore Intent choosepictureintent = new Intent(Intent.ACTION_PICK, ë

More information

ORANGE FOR ORACLE V4.0 INSTALLATION GUIDE (Online Upgrade) ORANGE CONFIGURATION ADMIN O

ORANGE FOR ORACLE V4.0 INSTALLATION GUIDE (Online Upgrade) ORANGE CONFIGURATION ADMIN O Orange for ORACLE V4.0 Installation Guide ORANGE FOR ORACLE V4.0 INSTALLATION GUIDE...1 1....2 1.1...2 1.2...2 1.2.1...2 1.2.2 (Online Upgrade)...11 1.3 ORANGE CONFIGURATION ADMIN...12 1.3.1 Orange Configuration

More information

歯Writing_Enterprise_Applications_2_JunoYoon.PDF

歯Writing_Enterprise_Applications_2_JunoYoon.PDF Writing Enterprise Applications with Java 2 Platform, Enterprise Edition - part2 JSTORM http//wwwjstormpekr Revision Document Information Document title Writing Enterprise Applications

More information

ch09

ch09 9 Chapter CHAPTER GOALS B I G J A V A 436 CHAPTER CONTENTS 9.1 436 Syntax 9.1 441 Syntax 9.2 442 Common Error 9.1 442 9.2 443 Syntax 9.3 445 Advanced Topic 9.1 445 9.3 446 9.4 448 Syntax 9.4 454 Advanced

More information

Orcad Capture 9.x

Orcad Capture 9.x OrCAD Capture Workbook (Ver 10.xx) 0 Capture 1 2 3 Capture for window 4.opj ( OrCAD Project file) Design file Programe link file..dsn (OrCAD Design file) Design file..olb (OrCAD Library file) file..upd

More information

JMF3_심빈구.PDF

JMF3_심빈구.PDF JMF JSTORM http://wwwjstormpekr Issued by: < > Revision: Document Information Document title: Document file name: Revision number: Issued by: JMF3_ doc Issue Date:

More information

어댑터뷰

어댑터뷰 04 커스텀어댑터뷰 (Custom Adapter View) 커스텀어댑터뷰 (Custom Adapter View) 커스텀어댑터뷰 (Custom Adatper View) 란? u 어댑터뷰의항목하나는단순한문자열이나이미지뿐만아니라, 임의의뷰가될수 있음 이미지뷰 u 커스텀어댑터뷰설정절차 1 2 항목을위한 XML 레이아웃정의 어댑터정의 3 어댑터를생성하고어댑터뷰객체에연결

More information

개발문서 Oracle - Clob

개발문서 Oracle - Clob 개발문서 ORACLE CLOB 2008.6.9 ( 주 ) 아이캔매니지먼트 개발팀황순규 0. clob개요 1. lob과 long의비교와 clob와 blob 2. 테이블생성쿼리 ( 차이점-추가사항 ) 3. select 쿼리 4. insert 쿼리및 jdbc프로그래밍 5. update 쿼리및 jdbc프로그래밍 (4, 5). putclobdata() 클래스 6. select

More information

Secure Programming Lecture1 : Introduction

Secure Programming Lecture1 : Introduction Malware and Vulnerability Analysis Lecture3-2 Malware Analysis #3-2 Agenda 안드로이드악성코드분석 악성코드분석 안드로이드악성코드정적분석 APK 추출 #1 adb 명령 안드로이드에설치된패키지리스트추출 adb shell pm list packages v0nui-macbook-pro-2:lecture3 v0n$

More information

JMF2_심빈구.PDF

JMF2_심빈구.PDF JMF JSTORM http://wwwjstormpekr Issued by: < > Document Information Document title: Document file name: Revision number: Issued by: JMF2_ doc Issue Date: Status: < > raica@nownurinet

More information

05-class.key

05-class.key 5 : 2 (method) (public) (private) (interface) 5.1 (Method), (public method) (private method) (constructor), 3 4 5.2 (client). (receiver)., System.out.println("Hello"); (client object) (receiver object)

More information

ETL_project_best_practice1.ppt

ETL_project_best_practice1.ppt ETL ETL Data,., Data Warehouse DataData Warehouse ETL tool/system: ETL, ETL Process Data Warehouse Platform Database, Access Method Data Source Data Operational Data Near Real-Time Data Modeling Refresh/Replication

More information

int total = 0; for( int i=1; i<=5; i++ ) { for( int j=1; j<=i; i++ ) { total ++; System.out.println( total ); 대구분 : 객체와 Class 소구분 : 객체생성과사용 / Class 선언

int total = 0; for( int i=1; i<=5; i++ ) { for( int j=1; j<=i; i++ ) { total ++; System.out.println( total ); 대구분 : 객체와 Class 소구분 : 객체생성과사용 / Class 선언 과목명총문항수 O/X 문제형 4 지선다형 5 지선다형단답형서술형 JAVA( 필기테스트 ) 20 문항 0 문항 10 문항 0 문항 10 문항 0 문항 대구분 : Java API 소구분 : Object class/string class/stringbuffer/wrapper ( 단답형 ) [Q1] 다음프로그램은간단한회원정보를포함하고있는클래스를작성한것이다. 실행결과를적으시오.

More information

PowerPoint Presentation

PowerPoint Presentation Package Class 1 Heeseung Jo 목차 section 1 패키지개요와패키지의사용 section 2 java.lang 패키지의개요 section 3 Object 클래스 section 4 포장 (Wrapper) 클래스 section 5 문자열의개요 section 6 String 클래스 section 7 StringBuffer 클래스 section

More information

mytalk

mytalk 한국정보보호학회소프트웨어보안연구회 총괄책임자 취약점분석팀 안준선 ( 항공대 ) 도경구 ( 한양대 ) 도구개발팀도경구 ( 한양대 ) 시큐어코딩팀 오세만 ( 동국대 ) 전체적인 그림 IL Rules Flowgraph Generator Flowgraph Analyzer 흐름그래프 생성기 흐름그래프 분석기 O parser 중간언어 O 파서 RDL

More information

OOP 소개

OOP 소개 OOP : @madvirus, : madvirus@madvirus.net : @madvirus : madvirus@madvirus.net ) ) ) 7, 3, JSP 2 ? 3 case R.id.txt_all: switch (menu_type) { case GROUP_ALL: showrecommend("month"); case GROUP_MY: type =

More information

목차 BUG 문법에맞지않는질의문수행시, 에러메시지에질의문의일부만보여주는문제를수정합니다... 3 BUG ROUND, TRUNC 함수에서 DATE 포맷 IW 를추가지원합니다... 5 BUG ROLLUP/CUBE 절을포함하는질의는 SUBQUE

목차 BUG 문법에맞지않는질의문수행시, 에러메시지에질의문의일부만보여주는문제를수정합니다... 3 BUG ROUND, TRUNC 함수에서 DATE 포맷 IW 를추가지원합니다... 5 BUG ROLLUP/CUBE 절을포함하는질의는 SUBQUE ALTIBASE HDB 6.3.1.10.1 Patch Notes 목차 BUG-45710 문법에맞지않는질의문수행시, 에러메시지에질의문의일부만보여주는문제를수정합니다... 3 BUG-45730 ROUND, TRUNC 함수에서 DATE 포맷 IW 를추가지원합니다... 5 BUG-45760 ROLLUP/CUBE 절을포함하는질의는 SUBQUERY REMOVAL 변환을수행하지않도록수정합니다....

More information

( )부록

( )부록 A ppendix 1 2010 5 21 SDK 2.2. 2.1 SDK. DevGuide SDK. 2.2 Frozen Yoghurt Froyo. Donut, Cupcake, Eclair 1. Froyo (Ginger Bread) 2010. Froyo Eclair 0.1.. 2.2. UI,... 2.2. PC 850 CPU Froyo......... 2. 2.1.

More information

Javascript.pages

Javascript.pages JQuery jquery part1 JavaScript : e-mail:leseraphina@naver.com http://www.webhard.co.kr I.? 2 ......,,. : : html5 ; ; .

More information

14-Servlet

14-Servlet JAVA Programming Language Servlet (GenericServlet) HTTP (HttpServlet) 2 (1)? CGI 3 (2) http://jakarta.apache.org JSDK(Java Servlet Development Kit) 4 (3) CGI CGI(Common Gateway Interface) /,,, Client Server

More information

thesis

thesis CORBA TMN Surveillance System DPNM Lab, GSIT, POSTECH Email: mnd@postech.ac.kr Contents Motivation & Goal Related Work CORBA TMN Surveillance System Implementation Conclusion & Future Work 2 Motivation

More information

Something that can be seen, touched or otherwise sensed

Something that can be seen, touched or otherwise sensed Something that can be seen, touched or otherwise sensed Things about an object Weight Height Material Things an object does Pen writes Book stores words Water have Fresh water Rivers Oceans have

More information

목 차

목      차 Oracle 9i Admim 1. Oracle RDBMS 1.1 (System Global Area:SGA) 1.1.1 (Shared Pool) 1.1.2 (Database Buffer Cache) 1.1.3 (Redo Log Buffer) 1.1.4 Java Pool Large Pool 1.2 Program Global Area (PGA) 1.3 Oracle

More information

13ÀåÃß°¡ºÐ

13ÀåÃß°¡ºÐ 13 CHAPTER 13 CHAPTER 2 3 4 5 6 7 06 android:background="#ffffffff"> 07

More information

목차 BUG offline replicator 에서유효하지않은로그를읽을경우비정상종료할수있다... 3 BUG 각 partition 이서로다른 tablespace 를가지고, column type 이 CLOB 이며, 해당 table 을 truncate

목차 BUG offline replicator 에서유효하지않은로그를읽을경우비정상종료할수있다... 3 BUG 각 partition 이서로다른 tablespace 를가지고, column type 이 CLOB 이며, 해당 table 을 truncate ALTIBASE HDB 6.1.1.5.6 Patch Notes 목차 BUG-39240 offline replicator 에서유효하지않은로그를읽을경우비정상종료할수있다... 3 BUG-41443 각 partition 이서로다른 tablespace 를가지고, column type 이 CLOB 이며, 해당 table 을 truncate 한뒤, hash partition

More information

1217 WebTrafMon II

1217 WebTrafMon II (1/28) (2/28) (10 Mbps ) Video, Audio. (3/28) 10 ~ 15 ( : telnet, ftp ),, (4/28) UDP/TCP (5/28) centralized environment packet header information analysis network traffic data, capture presentation network

More information

구축환경 OS : Windows 7 그외 OS 의경우교재 p26-40 참조 Windows 의다른버전은조금다르게나타날수있음 Browser : Google Chrome 다른브라우저를사용해도별차이없으나추후수업의모든과정은크롬사용 한

구축환경 OS : Windows 7 그외 OS 의경우교재 p26-40 참조 Windows 의다른버전은조금다르게나타날수있음 Browser : Google Chrome 다른브라우저를사용해도별차이없으나추후수업의모든과정은크롬사용   한 수업환경구축 웹데이터베이스구축및실습 구축환경 OS : Windows 7 그외 OS 의경우교재 p26-40 참조 Windows 의다른버전은조금다르게나타날수있음 Browser : Google Chrome 다른브라우저를사용해도별차이없으나추후수업의모든과정은크롬사용 http://chrome.google.com 한림대학교웹데이터베이스 - 이윤환 APM 설치 : AUTOSET6

More information

비긴쿡-자바 00앞부속

비긴쿡-자바 00앞부속 IT COOKBOOK 14 Java P r e f a c e Stay HungryStay Foolish 3D 15 C 3 16 Stay HungryStay Foolish CEO 2005 L e c t u r e S c h e d u l e 1 14 PPT API C A b o u t T h i s B o o k IT CookBook for Beginner Chapter

More information

J2EE Concepts

J2EE Concepts ! Introduction to J2EE (1) - J2EE Servlet/JSP/JDBC iseminar.. 1544-3355 ( ) iseminar Chat. 1 Who Are We? Business Solutions Consultant Oracle Application Server 10g Business Solutions Consultant Oracle10g

More information

RDB개요.ppt

RDB개요.ppt 1 2 3 < > 1 SQL SQL 2 SQL 3 column DEPT DEPT# DNAME BUDGET D1 D2 D3 Marketing Development Research 10M 12M 5M tuple EMP EMP# ENAME DEPT# SALARY D1 40 D1 45 E1 E2 E3 Lopez Cheng Finzi D2 30 E4 Satio D2

More information

과정명

과정명 데이터접근프레임워크 (JPA 와 Hibernate) 교육기간 : 2014.05.26 ~ 05.30 강사 : 박석재, 임병인 넥스트리소프트 demonpark@nextree.co.kr byleem@nextree.co.kr 과정개요 교육목표 객체 / 관계매핑에대한숙달 Hibernate 이해및활용 JPA 이해및활용 트랜잭션및캐싱에대한이해 교육특징 강의와실습을병행한명확한이해

More information