/** Test retrieveing a personal item by a generic item id */
  @Test
  public void getPersonalItemByGenericItemIdDAOTest() {

    TransactionStatus ts = tm.getTransaction(td);
    UserEmail userEmail = new UserEmail("user@email");

    // create a user who has their own folder
    IrUser user = new IrUser("user", "password");
    user.setPasswordEncoding("none");
    user.addUserEmail(userEmail, true);

    // create the user
    userDAO.makePersistent(user);
    tm.commit(ts);

    ts = tm.getTransaction(td);
    GenericItem genericItem = new GenericItem("aItem");
    GenericItem genericItem2 = new GenericItem("aSecondItem");
    VersionedItem versionedItem = new VersionedItem(user, genericItem);
    versionedItem.addNewVersion(genericItem2);
    PersonalItem personalItem = new PersonalItem(user, versionedItem);
    personalItemDAO.makePersistent(personalItem);
    tm.commit(ts);

    ts = tm.getTransaction(td);
    PersonalItem other = personalItemDAO.getById(personalItem.getId(), false);
    VersionedItem otherVersionedItem = other.getVersionedItem();
    assert otherVersionedItem != null : "Versioned Item should be found";
    assert otherVersionedItem.getOwner() != null : "Owner should not be null";
    assert other.equals(personalItem) : "The personal item " + personalItem + " should be found";

    // make sure select works
    PersonalItem other2 = personalItemDAO.getPersonalItem(genericItem.getId());
    assert other2.equals(other) : " other 2 = " + other2 + " other = " + other;

    PersonalItem other3 = personalItemDAO.getPersonalItem(genericItem2.getId());
    assert other3.equals(other) : " other 3 = " + other3 + " other = " + other;
    tm.commit(ts);

    ts = tm.getTransaction(td);
    personalItemDAO.makeTransient(personalItemDAO.getById(personalItem.getId(), false));
    versionedItemDAO.makeTransient(versionedItemDAO.getById(versionedItem.getId(), false));
    itemDAO.makeTransient(itemDAO.getById(genericItem.getId(), false));
    itemDAO.makeTransient(itemDAO.getById(genericItem2.getId(), false));
    userDAO.makeTransient(userDAO.getById(user.getId(), false));
    tm.commit(ts);
  }