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);
}
我希望这个测试将抛出一个异常,因为我尝试保存两个具有相同名称的实体,但它工作正常!
我在哪里错了?
是否在创建数据库时设置了属性? –
对不起,你在说什么属性? –
“唯一”属性仅用于模式生成,不会强制插入/更新本身的唯一性。如果你让休眠生成你的模式,那么你应该在数据库级别对'name'获得一个唯一的约束,这将导致一个异常。请参阅:http://stackoverflow.com/questions/4105164/hibernate-unique-column-constraint-being-ignored – DannyMo