From e48241a8a3f1a87efea4e74a8f33f9bfa7d6c188 Mon Sep 17 00:00:00 2001
From: Martin Goik <goik@hdm-stuttgart.de>
Date: Fri, 15 Feb 2013 21:16:42 +0100
Subject: [PATCH] UNIQUE in JPA

---
 .../java/hibintro/v5/PersistSingleUser.java   | 29 +++++++
 .../src/main/java/hibintro/v5/User.java       | 82 +++++++++++++++++++
 .../main/java/hibintro/v5/hibernate.cfg.xml   | 17 ++++
 3 files changed, 128 insertions(+)
 create mode 100644 ws/eclipse/HibIntro/src/main/java/hibintro/v5/PersistSingleUser.java
 create mode 100644 ws/eclipse/HibIntro/src/main/java/hibintro/v5/User.java
 create mode 100644 ws/eclipse/HibIntro/src/main/java/hibintro/v5/hibernate.cfg.xml

diff --git a/ws/eclipse/HibIntro/src/main/java/hibintro/v5/PersistSingleUser.java b/ws/eclipse/HibIntro/src/main/java/hibintro/v5/PersistSingleUser.java
new file mode 100644
index 000000000..0471ccc55
--- /dev/null
+++ b/ws/eclipse/HibIntro/src/main/java/hibintro/v5/PersistSingleUser.java
@@ -0,0 +1,29 @@
+package hibintro.v5;
+
+import hibintro.util.HibernateUtil;
+
+import org.hibernate.Session;
+import org.hibernate.Transaction;
+
+/**
+ * @author goik
+ * 
+ * Persisting a simple instance of {@link Project}
+ *
+ */
+public class PersistSingleUser {
+
+   /**
+    * @param args not used.
+    */
+   public static void main(String[] args) {
+      final Session session = HibernateUtil.createSessionFactory("hibintro/v5/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/hibintro/v5/User.java b/ws/eclipse/HibIntro/src/main/java/hibintro/v5/User.java
new file mode 100644
index 000000000..9a09b0c39
--- /dev/null
+++ b/ws/eclipse/HibIntro/src/main/java/hibintro/v5/User.java
@@ -0,0 +1,82 @@
+package hibintro.v5;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.Table;
+import javax.persistence.UniqueConstraint;
+
+/**
+ * @author goik
+ * 
+ *         {@link User} instances with primary key and unique constrait
+ * 
+ */
+@Entity
+@Table(uniqueConstraints={@UniqueConstraint(columnNames={"uid"})})
+public class User {
+
+  int uidNumber;
+  @Id
+  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;
+  }
+
+  /**
+   * @param uid
+   *          See {@link #getUid()}.
+   */
+  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;
+  }
+
+  /**
+   * @param cname
+   *          See {@link #getCname()}.
+   */
+  public void setCname(String cname) {
+    this.cname = cname;
+  }
+
+  /**
+   * Hibernate/JPA require a default constructor
+   */
+  public User() {
+  }
+
+  /**
+   * @param uid
+   *          See {@link #getUid()}.
+   * @param cname
+   *          See {@link #getCname()}.
+   */
+  public User(int uidNumber, String uid, String cname) {
+    setUidNumber(uidNumber);
+    setUid(uid);
+    setCname(cname);
+  }
+}
\ No newline at end of file
diff --git a/ws/eclipse/HibIntro/src/main/java/hibintro/v5/hibernate.cfg.xml b/ws/eclipse/HibIntro/src/main/java/hibintro/v5/hibernate.cfg.xml
new file mode 100644
index 000000000..a8e691960
--- /dev/null
+++ b/ws/eclipse/HibIntro/src/main/java/hibintro/v5/hibernate.cfg.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
+                                         "http://hibernate.sourceforge.net/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">true</property>
+  <property name="hibernate.format_sql">true</property>
+  <property name="hibernate.hbm2ddl.auto">update</property>
+  
+  <mapping class="hibintro.v5.User"/>
+ </session-factory>
+</hibernate-configuration>
-- 
GitLab