|
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.