我有一个简单的抽象DAO,我创建了以下方法:
protected T update(T entity) {
return em.merge(entity);
}
其中实体只是我的应用程序中使用@Entity注释的任何对象。现在......如果您尝试更新非现有对象,我想抛出异常。我打算在合并之前执行查找,如果查找操作返回null则抛出异常,如果实体存在则抛出合并。如果有更好的方法可以让我徘徊。
答案 0 :(得分:1)
可能的解决方案:您可以根据主键进行检查。实体必须(应该?)拥有@Id
字段:
@Entity
public class Entity implements EntityInterface{
@Id
private Long id;
@Override
public Long getId(){
return this.id;
}
}
使用界面
public interface EntityInterface{
public Long getId();
}
默认情况下,实例化实体时,id
为空,只有在数据库中保留后才会分配值:id将由您通过@GeneratedValue
定义的方法生成。因此,以下检查应符合您的要求:
public abstract class AbstractService<T extends EntityInterface>{
protected T update(T entity){
// if by any chance you have to call this method on an entity with a null
// primary key, it means that the entity has not been persisted in the
// database yet
if(entity.getId() == null){
// or whatever
return null;
}
return em.merge(entity);
}
}
希望这个帮助
来源:JB Nizet's comment和个人代码