📄 componenttest.java
字号:
//$Id: ComponentTest.java 11346 2007-03-26 17:24:58Z steve.ebersole@jboss.com $package org.hibernate.test.component.basic;import java.util.ArrayList;import java.util.Date;import java.util.List;import junit.framework.Test;import org.hibernate.Session;import org.hibernate.Transaction;import org.hibernate.Hibernate;import org.hibernate.cfg.Configuration;import org.hibernate.cfg.Environment;import org.hibernate.cfg.Mappings;import org.hibernate.criterion.Property;import org.hibernate.dialect.Dialect;import org.hibernate.dialect.function.SQLFunction;import org.hibernate.junit.functional.FunctionalTestCase;import org.hibernate.junit.functional.FunctionalTestClassTestSuite;import org.hibernate.mapping.Component;import org.hibernate.mapping.Formula;import org.hibernate.mapping.PersistentClass;/** * @author Gavin King */public class ComponentTest extends FunctionalTestCase { public ComponentTest(String str) { super(str); } public String[] getMappings() { return new String[] { "component/basic/User.hbm.xml" }; } public static Test suite() { return new FunctionalTestClassTestSuite( ComponentTest.class ); } public void configure(Configuration cfg) { cfg.setProperty( Environment.GENERATE_STATISTICS, "true" ); } public void afterConfigurationBuilt(Mappings mappings, Dialect dialect) { super.afterConfigurationBuilt( mappings, dialect ); // Oracle and Postgres do not have year() functions, so we need to // redefine the 'User.person.yob' formula // // consider temporary until we add the capability to define // mapping foprmulas which can use dialect-registered functions... PersistentClass user = mappings.getClass( User.class.getName() ); org.hibernate.mapping.Property personProperty = user.getProperty( "person" ); Component component = ( Component ) personProperty.getValue(); Formula f = ( Formula ) component.getProperty( "yob" ).getValue().getColumnIterator().next(); SQLFunction yearFunction = ( SQLFunction ) dialect.getFunctions().get( "year" ); if ( yearFunction == null ) { // the dialect not know to support a year() function, so rely on the // ANSI SQL extract function f.setFormula( "extract( year from dob )"); } else { List args = new ArrayList(); args.add( "dob" ); f.setFormula( yearFunction.render( args, null ) ); } } public void testUpdateFalse() { getSessions().getStatistics().clear(); Session s = openSession(); Transaction t = s.beginTransaction(); User u = new User( "gavin", "secret", new Person("Gavin King", new Date(), "Karbarook Ave") ); s.persist(u); s.flush(); u.getPerson().setName("XXXXYYYYY"); t.commit(); s.close(); assertEquals( 1, getSessions().getStatistics().getEntityInsertCount() ); assertEquals( 0, getSessions().getStatistics().getEntityUpdateCount() ); s = openSession(); t = s.beginTransaction(); u = (User) s.get(User.class, "gavin"); assertEquals( u.getPerson().getName(), "Gavin King" ); s.delete(u); t.commit(); s.close(); assertEquals( 1, getSessions().getStatistics().getEntityDeleteCount() ); } public void testComponent() { Session s = openSession(); Transaction t = s.beginTransaction(); User u = new User( "gavin", "secret", new Person("Gavin King", new Date(), "Karbarook Ave") ); s.persist(u); s.flush(); u.getPerson().changeAddress("Phipps Place"); t.commit(); s.close(); s = openSession(); t = s.beginTransaction(); u = (User) s.get(User.class, "gavin"); assertEquals( u.getPerson().getAddress(), "Phipps Place" ); assertEquals( u.getPerson().getPreviousAddress(), "Karbarook Ave" ); assertEquals( u.getPerson().getYob(), u.getPerson().getDob().getYear()+1900 ); u.setPassword("$ecret"); t.commit(); s.close(); s = openSession(); t = s.beginTransaction(); u = (User) s.get(User.class, "gavin"); assertEquals( u.getPerson().getAddress(), "Phipps Place" ); assertEquals( u.getPerson().getPreviousAddress(), "Karbarook Ave" ); assertEquals( u.getPassword(), "$ecret" ); s.delete(u); t.commit(); s.close(); } public void testComponentStateChangeAndDirtiness() { // test for HHH-2366 Session s = openSession(); s.beginTransaction(); User u = new User( "steve", "hibernater", new Person( "Steve Ebersole", new Date(), "Main St") ); s.persist( u ); s.flush(); long intialUpdateCount = sfi().getStatistics().getEntityUpdateCount(); u.getPerson().setAddress( "Austin" ); s.flush(); assertEquals( intialUpdateCount + 1, sfi().getStatistics().getEntityUpdateCount() ); intialUpdateCount = sfi().getStatistics().getEntityUpdateCount(); u.getPerson().setAddress( "Cedar Park" ); s.flush(); assertEquals( intialUpdateCount + 1, sfi().getStatistics().getEntityUpdateCount() ); s.delete( u ); s.getTransaction().commit(); s.close(); } public void testComponentQueries() { Session s = openSession(); Transaction t = s.beginTransaction(); Employee emp = new Employee(); emp.setHireDate( new Date() ); emp.setPerson( new Person() ); emp.getPerson().setName( "steve" ); emp.getPerson().setDob( new Date() ); s.save( emp ); s.createQuery( "from Employee e where e.person = :p and 1 = 1 and 2=2" ).setParameter( "p", emp.getPerson() ).list(); s.createQuery( "from Employee e where :p = e.person" ).setParameter( "p", emp.getPerson() ).list(); s.createQuery( "from Employee e where e.person = ('steve', current_timestamp)" ).list(); s.delete( emp ); t.commit(); s.close(); } public void testComponentFormulaQuery() { Session s = openSession(); Transaction t = s.beginTransaction(); s.createQuery("from User u where u.person.yob = 1999").list(); s.createCriteria(User.class) .add( Property.forName("person.yob").between( new Integer(1999), new Integer(2002) ) ) .list(); if ( getDialect().supportsRowValueConstructorSyntax() ) { s.createQuery("from User u where u.person = ('gavin', :dob, 'Peachtree Rd', 'Karbarook Ave', 1974, 'Peachtree Rd')") .setDate("dob", new Date("March 25, 1974")).list(); s.createQuery("from User where person = ('gavin', :dob, 'Peachtree Rd', 'Karbarook Ave', 1974, 'Peachtree Rd')") .setDate("dob", new Date("March 25, 1974")).list(); } t.commit(); s.close(); } public void testNamedQuery() { Session s = openSession(); Transaction t = s.beginTransaction(); s.getNamedQuery("userNameIn") .setParameterList( "nameList", new Object[] {"1ovthafew", "turin", "xam"} ) .list(); t.commit(); s.close(); } public void testMergeComponent() { Session s = openSession(); Transaction t = s.beginTransaction(); Employee emp = new Employee(); emp.setHireDate( new Date() ); emp.setPerson( new Person() ); emp.getPerson().setName( "steve" ); emp.getPerson().setDob( new Date() ); s.persist( emp ); t.commit(); s.close(); s = openSession(); t = s.beginTransaction(); emp = (Employee)s.get( Employee.class, emp.getId() ); t.commit(); s.close(); assertNull(emp.getOptionalComponent()); emp.setOptionalComponent( new OptionalComponent() ); emp.getOptionalComponent().setValue1( "emp-value1" ); emp.getOptionalComponent().setValue2( "emp-value2" ); s = openSession(); t = s.beginTransaction(); emp = (Employee)s.merge( emp ); t.commit(); s.close(); s = openSession(); t = s.beginTransaction(); emp = (Employee)s.get( Employee.class, emp.getId() ); t.commit(); s.close(); assertEquals("emp-value1", emp.getOptionalComponent().getValue1()); assertEquals("emp-value2", emp.getOptionalComponent().getValue2()); emp.getOptionalComponent().setValue1( null ); emp.getOptionalComponent().setValue2( null ); s = openSession(); t = s.beginTransaction(); emp = (Employee)s.merge( emp ); t.commit(); s.close(); s = openSession(); t = s.beginTransaction(); emp = (Employee)s.get( Employee.class, emp.getId() ); Hibernate.initialize(emp.getDirectReports()); t.commit(); s.close(); assertNull(emp.getOptionalComponent()); Employee emp1 = new Employee(); emp1.setHireDate( new Date() ); emp1.setPerson( new Person() ); emp1.getPerson().setName( "bozo" ); emp1.getPerson().setDob( new Date() ); emp.getDirectReports().add( emp1 ); s = openSession(); t = s.beginTransaction(); emp = (Employee)s.merge( emp ); t.commit(); s.close(); s = openSession(); t = s.beginTransaction(); emp = (Employee)s.get( Employee.class, emp.getId() ); Hibernate.initialize(emp.getDirectReports()); t.commit(); s.close(); assertEquals(1, emp.getDirectReports().size()); emp1 = (Employee)emp.getDirectReports().iterator().next(); assertNull( emp1.getOptionalComponent() ); emp1.setOptionalComponent( new OptionalComponent() ); emp1.getOptionalComponent().setValue1( "emp1-value1" ); emp1.getOptionalComponent().setValue2( "emp1-value2" ); s = openSession(); t = s.beginTransaction(); emp = (Employee)s.merge( emp ); t.commit(); s.close(); s = openSession(); t = s.beginTransaction(); emp = (Employee)s.get( Employee.class, emp.getId() ); Hibernate.initialize(emp.getDirectReports()); t.commit(); s.close(); assertEquals(1, emp.getDirectReports().size()); emp1 = (Employee)emp.getDirectReports().iterator().next(); assertEquals( "emp1-value1", emp1.getOptionalComponent().getValue1()); assertEquals( "emp1-value2", emp1.getOptionalComponent().getValue2()); emp1.getOptionalComponent().setValue1( null ); emp1.getOptionalComponent().setValue2( null ); s = openSession(); t = s.beginTransaction(); emp = (Employee)s.merge( emp ); t.commit(); s.close(); s = openSession(); t = s.beginTransaction(); emp = (Employee)s.get( Employee.class, emp.getId() ); Hibernate.initialize(emp.getDirectReports()); t.commit(); s.close(); assertEquals(1, emp.getDirectReports().size()); emp1 = (Employee)emp.getDirectReports().iterator().next(); assertNull(emp1.getOptionalComponent()); s = openSession(); t = s.beginTransaction(); s.delete( emp ); t.commit(); s.close(); }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -