2013-07-03 74 views
0

美好的一天! 我尝试使用唯一ID和唯一名称做实体。 所以,Hibernate独特的注释不起作用

@MappedSuperclass 
public class BaseEntityImpl implements Serializable, BaseEntity 
{ 
    @Id 
    @GeneratedValue 
    protected Long id; 

    @Column(unique = true) 
    protected String name; 
//here are getters and setters 
} 

@Entity 
public class SimpleEntity extends BaseEntityImpl 
{ 
} 

这里是我的DAO

@Transactional(propagation = Propagation.MANDATORY) 
public class SimpleDaoImpl extends HibernateDaoSupport implements SimpleDao 
{ 
    public SimpleEntity createOrUpdate(SimpleEntity entity) 
    { 
     getSession().saveOrUpdate(entity); 
     return entity; 
    } 
} 

这里是我的单元测试(使用内存德比DB)

@Test 
public void create() 
{ 
    SimpleEntity entity = new SimpleEntity(); 
    entity.setName("name1"); 

    SimpleEntity entity2 = new SimpleEntity(); 
    entity2.setName("name1"); 

    simpleDao.createOrUpdate(entity); 
    simpleDao.createOrUpdate(entity2); 
} 

我希望这个测试将抛出一个异常,因为我尝试保存两个具有相同名称的实体,但它工作正常!

我在哪里错了?

+0

是否在创建数据库时设置了属性? –

+0

对不起,你在说什么属性? –

+0

“唯一”属性仅用于模式生成,不会强制插入/更新本身的唯一性。如果你让休眠生成你的模式,那么你应该在数据库级别对'name'获得一个唯一的约束,这将导致一个异常。请参阅:http://stackoverflow.com/questions/4105164/hibernate-unique-column-constraint-being-ignored – DannyMo

回答

0

因此,它很可能是德比忽略唯一约束。在MySql DB中,所有工作都正常