If you want name to be a unique column, you need to annotate it appropriately.

@Column(nullable=false,length=50,unique=true)

Matt

On Sat, Aug 2, 2008 at 7:53 PM, Alc4man <[EMAIL PROTECTED]> wrote:
>
> Hiya.
>
> When I run my ItemExistsExceptionTest it never fails like it's supposed to,
> even though it's very similar to the UserExistsExceptionTest.
>
> When I try to persist my entity, hibernate will store the same entity even
> though it already exists and newItem.equals(persistedItem) returns true.
>
> So I'm somewhat baffled as to why it does'nt throw an ItemExistsException.
>
> My item model:
> -------------------------------------
> @Entity
> @Table(name = "item")
> public class Item extends BaseObject implements Serializable {
>
>        private static final long serialVersionUID = 1L;
>
>        @Id
>        @GeneratedValue(strategy = GenerationType.AUTO)
>        @Column(name = "item_id")
>        private Long itemId;
>
>        @Column(name = "name", length = 200)
>        private String name;
>
>        @Column(name = "description", length = 1000)
>        private String description;
>
>        @Version
>        private Integer version;
>
> ..
>
>        public Integer getVersion() {
>                return version;
>        }
>
>    public void setVersion(Integer version) {
>        this.version = version;
>    }
>
> ..
>        public void setDescription(String description) {
>                this.description = description;
>        }
>
>        @Override
>        public boolean equals(Object o) {
>                if (this == o) return true;
>                if (!(o instanceof Item)) {
>                        return false;
>                }
>
>                final Item item = (Item) o;
>
>                return !(name != null ? !name.equals(item.getName()) : 
> item.getName() !=
> null);
>        }
>
>        @Override
>        public int hashCode() {
>                if (description != null) {
>                        return description.hashCode();
>                } else return 0;
>
>        }
>
>        @Override
>        public String toString() {
>                ToStringBuilder sb = new ToStringBuilder(this,
> ToStringStyle.DEFAULT_STYLE)
>                                .append(": name ", name);
>                return sb.toString();
>        }
>
> }
>
> ItemDaoHibernate:
> ----------------------------------------
>
> public class ItemDaoHibernate extends GenericDaoHibernate<Item, Long>
> implements ItemDao {
>
>        public ItemDaoHibernate() {
>                super(Item.class);
>        }
>
>        public Item saveItem(Item itemToSave) {
>                getHibernateTemplate().saveOrUpdate(itemToSave);
>                getHibernateTemplate().flush();
>                return itemToSave;
>        }
> }
>
> ItemManagerImpl:
> --------------------------
> ...
>        public Item saveItem(Item item) throws ItemExistsException {
>
>                Date now = new Date();
>
>                try {
>                        return dao.saveItem(item);
>                } catch (DataIntegrityViolationException e) {
>                        e.printStackTrace();
>                        log.warn(e.getMessage());
>                        throw new ItemExistsException("Item '" + 
> item.getName() + "' name '" +
> item.getName() + "' already exists");
>                } catch (EntityExistsException e) {
>                        e.printStackTrace();
>                        log.warn(e.getMessage());
>                        throw new ItemExistsException("Item '" + 
> item.getName() + "' name '" +
> item.getName() + "' already exists");
>                }
>
>        }
>
> application-services.xml (Where I have my AOP advisor:
> ------------------------------------------------------
>    <aop:config>
>        <aop:advisor id="userManagerTx" advice-ref="userManagerTxAdvice"
> pointcut="execution(* *..service.UserManager.*(..))" order="0"/>
>        <aop:advisor id="itemManagerTx" advice-ref="itemManagerTxAdvice"
> pointcut="execution(* *..service.ItemManager.*(..))" order="4"/>
> .....
>    <tx:advice id="itemManagerTxAdvice">
>        <tx:attributes>
>            <tx:method name="save*" rollback-for="ItemExistsException"/>
>        </tx:attributes>
>    </tx:advice>
> ------------------------------------------------------
>
> Anyone who can gimme me a hand here? This is causing all my detached
> entities to be inserted as new entities and is a major headache.
>
> - Al
>
> --
> View this message in context: 
> http://www.nabble.com/Test-for-entity-exists-exception-always-fails-tp18795198s2369p18795198.html
> Sent from the AppFuse - User mailing list archive at Nabble.com.
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
>
>

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to