diff --git a/ws/eclipse/HibIntro/src/main/java/session3/CompareNewlyCreated.java b/ws/eclipse/HibIntro/src/main/java/session3/CompareNewlyCreated.java new file mode 100644 index 0000000000000000000000000000000000000000..284670467af5b8277badeee41aa5b1548c1a4121 --- /dev/null +++ b/ws/eclipse/HibIntro/src/main/java/session3/CompareNewlyCreated.java @@ -0,0 +1,37 @@ +package session3; + +import hibintro.util.HibernateUtil; +import org.hibernate.Session; +import org.hibernate.Transaction; + +/** + * @author goik + * + * Comparing newly created {@link User} instances both with persistent + * and transient partners. + * + */ +public class CompareNewlyCreated { + + public static void main(String[] args) { + + // Create two transient instances + final User a = new User(123, "goik", "Martin Goik"), + b = new User(123, "goik", "Martin Goik"); + + System.out.println("a.equals(b):" + a.equals(b)); + + { + final Session session = HibernateUtil.createSessionFactory("session3/hibernate.cfg.xml").openSession(); + final Transaction transaction = session.beginTransaction(); + + // previously saved as new User(123, "goik", "Martin Goik"); + final User user = (User) session.load(User.class, 1L); + + System.out.println("a.equals(user)):" + a.equals(user)); + + transaction.commit(); + session.close(); + } + } +} \ No newline at end of file diff --git a/ws/eclipse/HibIntro/src/main/java/session3/LoadUser.java b/ws/eclipse/HibIntro/src/main/java/session3/LoadUser.java new file mode 100644 index 0000000000000000000000000000000000000000..b2b22c8bf0b246371d17851e043455256b963512 --- /dev/null +++ b/ws/eclipse/HibIntro/src/main/java/session3/LoadUser.java @@ -0,0 +1,48 @@ +package session3; + + + +import hibintro.util.HibernateUtil; +import org.hibernate.Session; +import org.hibernate.Transaction; + +/** + * @author goik + * + * Repeated retrieval of a single {@link User} object from a database. + * + */ +public class LoadUser { + + /** + * Retrieving a single {@link User} instance by means + * of its primary key value two times in succession. + * @param args unused + */ + public static void main(String[] args) { + + final User user; + { + final Session session = HibernateUtil.createSessionFactory("session3/hibernate.cfg.xml").openSession(); + final Transaction transaction = session.beginTransaction(); + user = (User) session.load(User.class, 1L); + final User user1 = (User) session.load(User.class, 1L); + + System.out.println(" first transaction: user.equals(user1):" + user.equals(user1)); + + transaction.commit(); + session.close(); + } + { + final Session session = HibernateUtil.createSessionFactory("session3/hibernate.cfg.xml").openSession(); + final Transaction transaction = session.beginTransaction(); + final User user2 = (User) session.load(User.class, 1L); + + boolean val = user.equals(user2); + System.out.println("second transaction: user.equals(user2):" + val); + + transaction.commit(); + session.close(); + } + } +} \ No newline at end of file diff --git a/ws/eclipse/HibIntro/src/main/java/session3/PersistSingleUser.java b/ws/eclipse/HibIntro/src/main/java/session3/PersistSingleUser.java new file mode 100644 index 0000000000000000000000000000000000000000..92e48c694b7fbce348852ff062559c71ade56f1c --- /dev/null +++ b/ws/eclipse/HibIntro/src/main/java/session3/PersistSingleUser.java @@ -0,0 +1,29 @@ +package session3; + +import hibintro.util.HibernateUtil; + +import org.hibernate.Session; +import org.hibernate.Transaction; + +/** + * @author goik + * + * Persisting a simple instance of {@link User} + * + */ +public class PersistSingleUser { + + /** + * @param args not used. + */ + public static void main(String[] args) { + final Session session = HibernateUtil.createSessionFactory("session3/hibernate.cfg.xml").openSession(); + + final Transaction transaction = session.beginTransaction(); + { + final User u = new User(123, "goik", "Martin Goik"); + session.save(u); + } + transaction.commit(); + } +} \ No newline at end of file diff --git a/ws/eclipse/HibIntro/src/main/java/session3/User.java b/ws/eclipse/HibIntro/src/main/java/session3/User.java new file mode 100644 index 0000000000000000000000000000000000000000..0d4e88a9066647038da16a6853ce5357940d0e71 --- /dev/null +++ b/ws/eclipse/HibIntro/src/main/java/session3/User.java @@ -0,0 +1,82 @@ +package session3; + +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.Id; +import javax.persistence.Table; +import javax.persistence.UniqueConstraint; + +/** + * @author goik + * + * {@link User} instances with primary key and unique constraint + * + */ +@Entity +@Table(uniqueConstraints={@UniqueConstraint(columnNames={"uid"}), + @UniqueConstraint(columnNames={"uidNumber"})}) +public class User { + + @Id + @GeneratedValue + private Long id; + public Long getId() {return id;} + protected void setId(Long id) {this.id = id;} + + int uidNumber; + public int getUidNumber() {return uidNumber;} + public void setUidNumber(int uidNumber) {this.uidNumber = uidNumber;} + + String uid; + + /** + * + * @return The user's unique login name e.g. "goik" + */ + @Column(nullable=false) + public String getUid() {return uid;} + public void setUid(String uid) {this.uid = uid;} + + String cname; + /** + * @return The user's common name e.g. "Martin Goik" + */ + @Column(nullable = false) + public String getCname() {return cname;} + public void setCname(String cname) {this.cname = cname;} + + protected User() {} + + /** + * @param uidNumber See {@link #getUidNumber()}. + * @param uid See {@link #getUid()}. This parameter must not be null + * @param cname See {@link #getCname()}. + */ + public User(final int uidNumber, final String uid, final String cname) { + setUidNumber(uidNumber); + setUid(uid); + setCname(cname); + } + @Override + public boolean equals(Object other) { + if (this == other) { + return true; + } else if (getUid() == null) { + return false; + } else if (other instanceof User) { + final User that = (User) other; + return this.getUid().equals( that.getUid() ); + } else { + return false; + } + } + @Override + public int hashCode() { + if (null == getUid()) { + return System.identityHashCode(this); + } else { + return getUid().hashCode(); + } + } +} \ No newline at end of file diff --git a/ws/eclipse/HibIntro/src/main/java/session3/hibernate.cfg.xml b/ws/eclipse/HibIntro/src/main/java/session3/hibernate.cfg.xml new file mode 100644 index 0000000000000000000000000000000000000000..b69f3505ac82d8a30a33d17893ecb22e1aaf08d5 --- /dev/null +++ b/ws/eclipse/HibIntro/src/main/java/session3/hibernate.cfg.xml @@ -0,0 +1,20 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<!DOCTYPE hibernate-configuration PUBLIC + "-//Hibernate/Hibernate Configuration DTD 3.0//EN" + "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd"> + +<hibernate-configuration> + <session-factory > + <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property> + <property name="hibernate.connection.password">XYZ</property> + <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/hdm</property> + <property name="hibernate.connection.username">hdmuser</property> + <property name="hibernate.dialect">org.hibernate.dialect.MySQL5InnoDBDialect</property> + <property name="hibernate.show_sql">false</property> + <property name="hibernate.format_sql">true</property> + <property name="hibernate.hbm2ddl.auto">update</property> + + <mapping class="session3.User"/> + </session-factory> +</hibernate-configuration>