Emerging Technology
Fall Semester, 2004 One-to-One Mapping |
||
---|---|---|
© 2004, All Rights Reserved, SDSU & Roger Whitney San Diego State University -- This page last updated 18-Nov-04 |
CS 683 Emerging Technologies Fall Semester, 2004 Doc 29 One-to-One Mapping
Using the Class database Account
Copyright ©, All rights reserved. 2004 SDSU & Roger Whitney, 5500 Campanile Drive, San Diego, CA 92182-7700 USA. OpenContent ( http://www.opencontent.org/opl.shtml) license defines the copyright on this document
CS 683 Fall 04 | Doc 29, One-to-One Mapping Slide # 2 |
login := Login new database: PostgreSQLPlatform new; username: 'yourUserName'; password: 'yourPassword'; connectString: 'bismarck.sdsu.edu_yourUserName'.
## PostgreSQL hibernate.dialect net.sf.hibernate.dialect.PostgreSQLDialect hibernate.connection.driver_class org.postgresql.Driver hibernate.connection.url jdbc:postgresql://bismarck.sdsu.edu/yourUserName hibernate.connection.username yourUserName hibernate.connection.password yourPassword
public static Connection getJdbcConnection() throws Exception { String dbUrl = " jdbc:postgresql://bismarck.sdsu.edu/yourUserName "; String user = " yourUserName"; String password = " yourPassword "; Class.forName("org.postgresql.Driver"); return DriverManager.getConnection( dbUrl, user, password); }
For Hibernate & JDBC the postgeSQL jdbc driver must be in your classpath
CS 683 Fall 04 | Doc 29, One-to-One Mapping Slide # 3 |
SQL used to create tables
CREATE TABLE PEOPLE ( ID serial NOT NULL , FIRST_NAME varchar(50) NULL , LAST_NAME varchar(50) NULL , ADDRESS_ID int4 NULL , CONSTRAINT PEOPLE_PK PRIMARY KEY (id), CONSTRAINT PEOPLE_UNIQ UNIQUE (id)) CREATE TABLE ADDRESSES ( STREET varchar(50) NULL , CITY varchar(50) NULL , ID serial NOT NULL , CONSTRAINT ADDRESSES_PK PRIMARY KEY (id), CONSTRAINT ADDRESSES_UNIQ UNIQUE (id))
CS 683 Fall 04 | Doc 29, One-to-One Mapping Slide # 4 |
package cs683; public class People { String firstName; String lastName; Address address; long id; public People () { } public People(String first, String last) { firstName = first; lastName = last; } public String getLastName() { return lastName; } public String getFirstName() { return firstName; } public void setFirstName( String name) {firstName = name; } public void setLastName( String name) { lastName = name; } public long getId() { return id; } public void setId(long l) {id = l; } public String toString() { return firstName + " " + lastName + id; } public Address getAddress() { return address; } public void setAddress(Address address) { this.address = address; } }
CS 683 Fall 04 | Doc 29, One-to-One Mapping Slide # 5 |
package cs683; public class Address { String street; String city; long id; public String getCity() { return city; } public void setCity(String city) { this.city = city; } public long getId() { return id; } public void setId(long id) { this.id = id; } public String getStreet() { return street; } public void setStreet(String street) { this.street = street; } }
CS 683 Fall 04 | Doc 29, One-to-One Mapping Slide # 6 |
<?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN" "http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd" > <hibernate-mapping package="cs683"> <class name="People" table="people" > <id name="id" type="long" column="id" > <generator class="increment"/> </id> <many-to-one name="address" class="cs683.Address" column="address_id" unique="true" cascade="all" /> <property name="lastName" column="last_name" type="string" not-null="false" length="50" /> <property name="firstName" column="first_name" type="string" not-null="false" length="50" />
CS 683 Fall 04 | Doc 29, One-to-One Mapping Slide # 7 |
</class> <class name="Address" table="addresses" > <id name="id" type="long" column="id" > <generator class="increment"/> </id> <property name="street" column="street" type="string" not-null="false" length="50" /> <property name="city" column="city" type="string" not-null="false" length="50" /> </class> </hibernate-mapping>
CS 683 Fall 04 | Doc 29, One-to-One Mapping Slide # 8 |
package cs683; import java.util.List; import net.sf.hibernate.HibernateException; import net.sf.hibernate.MappingException; 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; public class Main { public static void main(String[] args) throws Exception { System.out.println("Start"); sampleRead(); } static void sampleRead() throws MappingException, HibernateException, Exception { Session session = getHibernateSession(); Query getFrost = session.createQuery("from People p where p.lastName = :var1 " ); getFrost.setString("var1", "Whitney"); List result = getFrost.list(); System.out.println("Number of Objects: " + result.size()); System.out.println(result.get(0)); session.close(); }
CS 683 Fall 04 | Doc 29, One-to-One Mapping Slide # 9 |
static Session getHibernateSession() throws MappingException, HibernateException, Exception { Configuration config = new Configuration(); config.addClass(cs683.People.class); SessionFactory sessions = config.buildSessionFactory(); Session session = sessions.openSession(); return session; } }
CS 683 Fall 04 | Doc 29, One-to-One Mapping Slide # 10 |
# PostgreSQL hibernate.dialect net.sf.hibernate.dialect.PostgreSQLDialect hibernate.connection.driver_class org.postgresql.Driver hibernate.connection.url jdbc:postgresql://bismarck.sdsu.edu/cs683whitney hibernate.connection.username cs683whitney hibernate.connection.password secret hibernate.query.substitutions yes hibernate.connection.pool_size 2 hibernate.dialect=net.sf.hibernate.dialect.PostgreSQLDialect hibernate.c3p0.max_size 2 hibernate.c3p0.min_size 2 hibernate.c3p0.timeout 5000 hibernate.c3p0.max_statements 100 hibernate.c3p0.idle_test_period 3000 hibernate.c3p0.acquire_increment 2 hibernate.c3p0.validate false
CS 683 Fall 04 | Doc 29, One-to-One Mapping Slide # 11 |
Smalltalk defineClass: #Person superclass: #{Core.Object} indexedType: #none private: false instanceVariableNames: 'firstName lastName id address ' classInstanceVariableNames: '' imports: '' category: 'GlorpExperiments'
Smalltalk defineClass: #Address superclass: #{Core.Object} indexedType: #none private: false instanceVariableNames: 'street city id ' classInstanceVariableNames: '' imports: '' category: 'GlorpExperiments'
These classes have the standard accessor methods
CS 683 Fall 04 | Doc 29, One-to-One Mapping Slide # 12 |
Smalltalk defineClass: #GlorpTutorialDescriptor superclass: #{Glorp.DescriptorSystem} indexedType: #none private: false instanceVariableNames: '' classInstanceVariableNames: '' imports: ' Glorp.* ' category: 'GlorpExperiments' GlorpTutorialDescriptor >>allTableNames ^#( 'PEOPLE' 'ADDRESSES' ) GlorpTutorialDescriptor >>constructAllClasses ^(super constructAllClasses) add: Person; add: Address; yourself GlorpTutorialDescriptor >>tableForADDRESSES: aTable aTable createFieldNamed: 'street' type: (platform varChar: 50). (aTable createFieldNamed: 'city' type: (platform varChar: 50)). (aTable createFieldNamed: 'id' type: platform sequence) bePrimaryKey
CS 683 Fall 04 | Doc 29, One-to-One Mapping Slide # 13 |
GlorpTutorialDescriptor >>tableForPEOPLE: aTable | addressId | (aTable createFieldNamed: 'id' type: platform sequence) bePrimaryKey. (aTable createFieldNamed: 'first_name' type: (platform varChar: 50)). (aTable createFieldNamed: 'last_name' type: (platform varChar: 50)). addressId := aTable createFieldNamed: 'address_id' type: platform int4. aTable addForeignKeyFrom: addressId to: ((self tableNamed: 'ADDRESSES') fieldNamed: 'id'). GlorpTutorialDescriptor >>descriptorForAddress: aDescriptor | table | table := self tableNamed: 'ADDRESSES'. aDescriptor table: table. (aDescriptor newMapping: DirectMapping) from: #street to: (table fieldNamed: 'street'). (aDescriptor newMapping: DirectMapping) from: #city to: (table fieldNamed: 'city'). (aDescriptor newMapping: DirectMapping) from: #id to: (table fieldNamed: 'id').
CS 683 Fall 04 | Doc 29, One-to-One Mapping Slide # 14 |
GlorpTutorialDescriptor >>descriptorForPerson: aDescriptor | personTable | personTable := self tableNamed: 'PEOPLE'. aDescriptor table: personTable. (aDescriptor newMapping: DirectMapping) from: #firstName to: (personTable fieldNamed: 'first_name'). (aDescriptor newMapping: DirectMapping) from: #lastName to: (personTable fieldNamed: 'last_name'). (aDescriptor newMapping: DirectMapping) from: #id to: (personTable fieldNamed: 'id'). (aDescriptor newMapping: OneToOneMapping) attributeName: #address. GlorpTutorialDescriptor >>classModelForAddress: aClassModel aClassModel newAttributeNamed: #id. aClassModel newAttributeNamed: #street. aClassModel newAttributeNamed: #city. GlorpTutorialDescriptor >>classModelForPerson: aClassModel aClassModel newAttributeNamed: #id. aClassModel newAttributeNamed: #firstName. aClassModel newAttributeNamed: #lastName. aClassModel newAttributeNamed: #address type: Address.
CS 683 Fall 04 | Doc 29, One-to-One Mapping Slide # 15 |
login := Login new database: PostgreSQLPlatform new; username: 'cs683whitney'; password: 'secret'; connectString: 'bismarck.sdsu.edu_cs683whitney'. accessor := DatabaseAccessor forLogin: login. accessor login. session := GlorpSession new. session system: (GlorpTutorialDescriptor forPlatform: login database). session accessor: accessor. session beginUnitOfWork. person := Person first: 'Sam' last: 'Whitney'. address := Address new. address street: 'Maple'; city: 'SD'. person address: address. session register: person. session commitUnitOfWork
Copyright ©, All rights reserved.
2004 SDSU & Roger Whitney, 5500 Campanile Drive, San Diego, CA 92182-7700 USA.
OpenContent license defines the copyright on this document.