All pastes #2047863 Raw Edit

JPA trouble

public java v1 · immutable
#2047863 ·published 2011-04-18 17:50 UTC
rendered paste body
public class TheTest{    ...    @Test    public void shouldCreateCategoryWithCreateUser ()    {        User unmanagedUser = new User( "login", "password", ... );        User user0 = userEAO.create( unmanagedUser );        assertEquals( 0, user0.getCreatedItems().size() );        Category unmanagedCategory = new Category("simple-category-name", ..., user0, ... ); // Seting CreateUser        Category category0 = categoryEAO.create( unmanagedCategory );        User user = userEAO.findById( user0.getId() ); // Refresh User since Category was added.        assertEquals( user0.getId(), user.getId() );        assertEquals( unmanagedCategory.getPermalink(), category0.getPermalink() );        assertEquals( user, category0.getCreateUser() ); // OK; category has createUser.        assertEquals( 1, user.getCreatedItems().size() ); // Fails; CreateUser doesn't have Category.        assertEquals( category0, user.getCreatedItems().get(0) );    }}@Entity@Table(name="Users")public class Userextends dk.asklandd.moxo.entities.Entity{    @Id    @Column(name = "UserID")    @SequenceGenerator(name = "USER_ID_SEQ", sequenceName = "USER_ID_SEQUENCE", initialValue = 1, allocationSize = 1)    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "USER_ID_SEQ")    private int id = 0;    @OneToMany(mappedBy="createUser",  // "mappedBy" indicates parent is owning this many-to-one relationship mapping, EJB3iA p. 244+246+278.               cascade={CascadeType.ALL}, fetch=FetchType.EAGER )    @OrderBy("createDate DESC") // Pro JPA2 p. 128.    private List<Item>  createdItems = new ArrayList<Item>();    ...    public List<Item> getCreatedItems ()    {        return Collections.unmodifiableList( createdItems );    }}@Entity@Table(name="Items")@Inheritance(strategy=InheritanceType.JOINED) // EJB3iA, p. 287, 285.@DiscriminatorColumn(name="ItemType_DISCR", discriminatorType=DiscriminatorType.STRING)public abstract class Itemextends dk.asklandd.moxo.entities.Entityimplements Comparable<Item>, Serializable{    @Id    @Column(name = "ItemID")    @SequenceGenerator(name = "ITEM_ID_SEQ", sequenceName = "ITEM_ID_SEQUENCE", initialValue = 1, allocationSize = 1)    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "ITEM_ID_SEQ")    private int id;    @ManyToOne(cascade={CascadeType.ALL}, fetch=FetchType.EAGER) // EJBiA p. 244.    @JoinColumn(name="CreateUserID_FK", referencedColumnName="UserID", updatable=true) // EJB3iA p. 278b.    private User     createUser; // See User.createdItems.    ...}@Statelesspublic class UserEAOBeanimplements UserEAO{    @PersistenceContext(unitName = "MoxoPersistenceUnit")    protected EntityManager em;    ...    @Override    public User create ( User user )    {        em.persist( user );        return user;    }    ...    @Override    public User findById ( int userId )    throws EntityNotFoundException    {        try {            User user = em.find( User.class, userId );            if ( user == null ) {                throw new EntityNotFoundException(userId);            }            return user;        } catch ( javax.persistence.NoResultException ex ) {            throw new EntityNotFoundException( userId, ex );        }    }}@Statelesspublic class CategoryEAOBeanimplements CategoryEAO{    ...    @Override    public Category create ( Category category )    {        if ( category == null ) {            throw new IllegalArgumentException("null category");        }        ...        // Relationship persistence, EJBiA p. 314, 316.        User managedCreateUser = em.find(User.class, category.getCreateUser().getId());        category.setCreateUser( managedCreateUser );        em.merge( managedCreateUser );        em.persist( category );        return category;    }    ...}CREATE TABLE Users (  `UserID`				INT DEFAULT NULL AUTO_INCREMENT,  `Login`				varchar(255) NOT NULL,  `Password`			TINYTEXT NOT NULL,  `AccessLevel`			TINYINT NOT NULL,  `EMail`				TINYTEXT NULL,  `Homepage`			TINYTEXT NULL,  `DateOfBirth`			DATE NULL,  `Male`				BOOLEAN NOT NULL,  `Country`				TINYTEXT NULL,  `Location`			TINYTEXT NULL,  `Organisation`		TINYTEXT NULL,  `Description`			TINYTEXT NULL,  `SecurityQuestion`	TINYTEXT  NOT NULL,  `SecurityAnswer`		TINYTEXT  NOT NULL,  `FirstLogon`			DATETIME NULL,  `LastLogon`			DATETIME NULL,  `LogonCounts`			BIGINT NOT NULL,  PRIMARY KEY(`UserID`),  UNIQUE KEY `Login` (`Login`)) ENGINE = MyISAM;CREATE TABLE Items (	`ItemID`			INT NOT NULL AUTO_INCREMENT,	`ItemType_DISCR`	TINYTEXT NOT NULL,	`ItemType`			TINYTEXT NOT NULL,	`Name`				TINYTEXT NOT NULL,	`Description`		TINYTEXT,	`Permalink`			varchar(255) NOT NULL,	`CreateUserID_FK`	INT NOT NULL,	`CreateDate`		DATETIME NOT NULL,	`ModifyDate`		DATETIME,	`ParentItemID_FK`	INT,	`Position`			INT NOT NULL,	PRIMARY KEY(`ItemID`),	UNIQUE KEY `Permalink` (`Permalink`)) ENGINE = MyISAM;CREATE TABLE Categories (	`ItemID_FK`		INT NOT NULL,	PRIMARY KEY (ItemID_FK)) ENGINE = MyISAM;