001    /*
002     *  Copyright 2001-2007 Stephen Colebourne
003     *
004     *  Licensed under the Apache License, Version 2.0 (the "License");
005     *  you may not use this file except in compliance with the License.
006     *  You may obtain a copy of the License at
007     *
008     *      http://www.apache.org/licenses/LICENSE-2.0
009     *
010     *  Unless required by applicable law or agreed to in writing, software
011     *  distributed under the License is distributed on an "AS IS" BASIS,
012     *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013     *  See the License for the specific language governing permissions and
014     *  limitations under the License.
015     */
016    package org.joda.time.contrib.hibernate;
017    
018    import java.io.File;
019    import java.sql.SQLException;
020    
021    import org.hibernate.Session;
022    import org.hibernate.SessionFactory;
023    import org.hibernate.cfg.Configuration;
024    import org.joda.time.LocalTime;
025    
026    public class TestPersistentLocalTime extends HibernateTestCase
027    {
028        private LocalTime[] writeReadTimes = new LocalTime[]
029        {
030            new LocalTime(14, 2, 25),
031            new LocalTime(23, 59, 59, 999),
032                    new LocalTime(0, 0, 0)
033        };
034    
035        public void testSimpleStore() throws SQLException
036            {
037            SessionFactory factory = getSessionFactory();
038    
039            Session session = factory.openSession();
040    
041            for (int i = 0; i<writeReadTimes.length; i++)
042            {
043                LocalTime writeReadTime = writeReadTimes[i];
044    
045                Event event = new Event();
046                event.setId(i);
047                event.setLocalTime(writeReadTime);
048                            event.setLocalTime2(writeReadTime);
049                            event.setLocalTime3(writeReadTime);
050    
051                session.save(event);
052            }
053    
054            session.flush();
055            session.connection().commit();
056            session.close();
057    
058            for (int i = 0; i<writeReadTimes.length; i++)
059            {
060                LocalTime writeReadTime = writeReadTimes[i];
061    
062                session = factory.openSession();
063                Event eventReread = (Event) session.get(Event.class, new Integer(i));
064    
065                assertNotNull("get failed - event#'" + i + "'not found", eventReread);
066                assertNotNull("get failed - returned null", eventReread.getLocalTime());
067                            assertNotNull("get failed - returned null", eventReread.getLocalTime2());
068                            assertNotNull("get failed - returned null", eventReread.getLocalTime3());
069    
070                // we might loose the millis, depends on database
071                assertEquals("get failed - returned different time (TIME)",
072                    writeReadTime.getMillisOfDay()/1000,
073                    eventReread.getLocalTime().getMillisOfDay()/1000);
074    
075                            assertEquals("get failed - returned different time (INT)",
076                                    writeReadTime.getMillisOfDay(),
077                                    eventReread.getLocalTime2().getMillisOfDay());
078    
079                            assertEquals("get failed - returned different time (STRING)",
080                                    writeReadTime.getMillisOfDay(),
081                                    eventReread.getLocalTime3().getMillisOfDay());
082    
083                            session.close();
084            }
085        }
086    
087            protected void setupConfiguration(Configuration cfg)
088            {
089                    cfg.addFile(new File("src/test/java/org/joda/time/contrib/hibernate/event.hbm.xml"));
090                    cfg.addFile(new File("src/test/java/org/joda/time/contrib/hibernate/eventTZ.hbm.xml"));
091            }
092    }