/* * Hibernate, Relational Persistence for Idiomatic Java * * Copyright (c) 2009, Red Hat, Inc. and/or its affiliates or third- * party contributors as indicated by the @author tags or express * copyright attribution statements applied by the authors. * All third-party contributions are distributed under license by * Red Hat, Inc. * * This copyrighted material is made available to anyone wishing to * use, modify, copy, or redistribute it subject to the terms and * conditions of the GNU Lesser General Public License, as published * by the Free Software Foundation. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this distribution; if not, write to: * * Free Software Foundation, Inc. * 51 Franklin Street, Fifth Floor * Boston, MA 02110-1301 USA */ package org.hibernate.test.annotations.manytoonewithformula; import org.hibernate.Session; import org.hibernate.Transaction; import org.hibernate.dialect.HSQLDialect; import org.junit.Test; import org.hibernate.testing.SkipForDialect; import org.hibernate.testing.junit4.BaseCoreFunctionalTestCase; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; /** * @author Sharath Reddy */ public class ManyToOneWithFormulaTest extends BaseCoreFunctionalTestCase { @Test public void testManyToOneFromNonPk() throws Exception { Session s = openSession(); Transaction tx = s.beginTransaction(); Menu menu = new Menu(); menu.setOrderNbr( "123" ); menu.setDefault( "F" ); s.persist( menu ); FoodItem foodItem = new FoodItem(); foodItem.setItem( "Mouse" ); foodItem.setOrder( menu ); s.persist( foodItem ); s.flush(); s.clear(); foodItem = ( FoodItem ) s.get( FoodItem.class, foodItem.getId() ); assertNotNull( foodItem.getOrder() ); assertEquals( "123", foodItem.getOrder().getOrderNbr() ); tx.rollback(); s.close(); } @Test public void testManyToOneFromPk() throws Exception { Session s = openSession(); Transaction tx = s.beginTransaction(); Company company = new Company(); s.persist( company ); Person person = new Person(); person.setDefaultFlag( "T" ); person.setCompanyId( company.getId() ); s.persist( person ); s.flush(); s.clear(); company = ( Company ) s.get( Company.class, company.getId() ); assertNotNull( company.getDefaultContactPerson() ); assertEquals( person.getId(), company.getDefaultContactPerson().getId() ); tx.rollback(); s.close(); } @Test @SkipForDialect(value = { HSQLDialect.class }, comment = "The used join conditions does not work in HSQLDB. See HHH-4497") public void testManyToOneToPkWithOnlyFormula() throws Exception { Session s = openSession(); Transaction tx = s.beginTransaction(); Language language = new Language(); language.setCode( "EN" ); language.setName( "English" ); s.persist( language ); Message msg = new Message(); msg.setLanguageCode( "en" ); msg.setLanguageName( "English" ); s.persist( msg ); s.flush(); s.clear(); msg = ( Message ) s.get( Message.class, msg.getId() ); assertNotNull( msg.getLanguage() ); assertEquals( "EN", msg.getLanguage().getCode() ); tx.rollback(); s.close(); } @Test public void testReferencedColumnNameBelongsToEmbeddedIdOfReferencedEntity() throws Exception { Session session = openSession(); Transaction tx = session.beginTransaction(); Integer companyCode = 10; Integer mfgCode = 100; String contractNumber = "NSAR97841"; ContractId contractId = new ContractId(companyCode, 12457l, 1); Manufacturer manufacturer = new Manufacturer(new ManufacturerId( companyCode, mfgCode), "FORD"); Model model = new Model(new ModelId(companyCode, mfgCode, "FOCUS"), "FORD FOCUS"); session.persist(manufacturer); session.persist(model); Contract contract = new Contract(); contract.setId(contractId); contract.setContractNumber(contractNumber); contract.setManufacturer(manufacturer); contract.setModel(model); session.persist(contract); session.flush(); session.clear(); contract = (Contract) session.load(Contract.class, contractId); assertEquals("NSAR97841", contract.getContractNumber()); assertEquals("FORD", contract.getManufacturer().getName()); assertEquals("FORD FOCUS", contract.getModel().getName()); tx.commit(); session.close(); } @Test @SkipForDialect(value = { HSQLDialect.class }, comment = "The used join conditions does not work in HSQLDB. See HHH-4497") public void testManyToOneFromNonPkToNonPk() throws Exception { // also tests usage of the stand-alone @JoinFormula annotation (i.e. not wrapped within @JoinColumnsOrFormulas) Session s = openSession(); Transaction tx = s.beginTransaction(); Product kit = new Product(); kit.id = 1; kit.productIdnf = "KIT"; kit.description = "Kit"; s.persist(kit); Product kitkat = new Product(); kitkat.id = 2; kitkat.productIdnf = "KIT_KAT"; kitkat.description = "Chocolate"; s.persist(kitkat); s.flush(); s.clear(); kit = (Product) s.get(Product.class, 1); kitkat = (Product) s.get(Product.class, 2); System.out.println(kitkat.description); assertNotNull(kitkat); assertEquals(kit, kitkat.getProductFamily()); assertEquals(kit.productIdnf, kitkat.getProductFamily().productIdnf); assertEquals("KIT_KAT", kitkat.productIdnf.trim()); assertEquals("Chocolate", kitkat.description.trim()); tx.rollback(); s.close(); } @Override protected java.lang.Class<?>[] getAnnotatedClasses() { return new java.lang.Class[] { Menu.class, FoodItem.class, Company.class, Person.class, Message.class, Language.class, Contract.class, ContractId.class, Model.class, ModelId.class, Manufacturer.class, ManufacturerId.class, Product.class }; } }