FileDocCategorySizeDatePackage
AlbumTest.javaAPI DocExample4060Fri Feb 27 23:07:14 GMT 2004com.oreilly.hh

AlbumTest.java

package com.oreilly.hh;

import net.sf.hibernate.*;
import net.sf.hibernate.cfg.Configuration;

import java.sql.Time;
import java.util.*;

/**
 * Create sample album data, letting Hibernate persist it for us.
 */
public class AlbumTest {

    /**
     * Quick and dirty helper method to handle repetitive portion of creating
     * album tracks. A real implementation would have much more flexibility.
     */
    private static void addAlbumTrack(Album album, String title, String file,
                                      Time length, Artist artist, int disc,
                                      int positionOnDisc, Session session)
        throws HibernateException
    {
        Track track = new Track(title, file, length, new Date(), (short)0,
                                SourceMedia.CD, new HashSet(), new HashSet());
        track.getArtists().add(artist);
        //        session.save(track);
        album.getTracks().add(new AlbumTrack(disc, positionOnDisc, track));
    }

    public static void main(String args[]) throws Exception {
        // Create a configuration based on the properties file we've put
        // in the standard place.
        Configuration config = new Configuration();

        // Tell it about the classes we want mapped.
        config.addClass(Track.class).addClass(Artist.class);
        config.addClass(Album.class);

        // Get the session factory we can use for persistence
        SessionFactory sessionFactory = config.buildSessionFactory();

        // Ask for a session using the JDBC information we've configured
        Session session = sessionFactory.openSession();
        Transaction tx = null;
        try {
            // Create some data and persist it
            tx = session.beginTransaction();

            Artist artist = CreateTest.getArtist("Martin L. Gore", true,
                                                 session);
            List albumTracks = new ArrayList(5);
            Album album = new Album("Counterfeit e.p.", 1, new Date(),
                                    albumTracks, new HashSet(), new HashSet());
            album.getArtists().add(artist);
            session.save(album);

            addAlbumTrack(album, "Compulsion", "vol1/album83/track01.mp3",
                          Time.valueOf("00:05:29"), artist, 1, 1, session);
            addAlbumTrack(album, "In a Manner of Speaking",
                          "vol1/album83/track02.mp3", Time.valueOf("00:04:21"),
                          artist, 1, 2, session);
            addAlbumTrack(album, "Smile in the Crowd",
                          "vol1/album83/track03.mp3", Time.valueOf("00:05:06"),
                          artist, 1, 3, session);
            addAlbumTrack(album, "Gone", "vol1/album83/track04.mp3",
                          Time.valueOf("00:03:32"), artist, 1, 4, session);
            addAlbumTrack(album, "Never Turn Your Back on Mother Earth",
                          "vol1/album83/track05.mp3", Time.valueOf("00:03:07"),
                          artist, 1, 5, session);
            addAlbumTrack(album, "Motherless Child", "vol1/album83/track06.mp3",
                          Time.valueOf("00:03:32"), artist, 1, 6, session);

            System.out.println(album);

            // We're done; make our changes permanent
            tx.commit();

            // Expermients discussed in "Lifecycle Associations"
            //tx = session.beginTransaction();
            //album.getTracks().remove(1);
            //session.update(album);
            //tx.commit();
            //
            //tx = session.beginTransaction();
            //session.delete(album);
            //tx.commit();

        } catch (Exception e) {
            if (tx != null) {
                // Something went wrong; discard all partial changes
                tx.rollback();
            }
            throw e;
        } finally {
            // No matter what, close the session
            session.close();
        }

        // Clean up after ourselves
        sessionFactory.close();
    }
}