我想實現一個反模式,因爲@EntityListener
s爲在某些情況下不足:JPA entity.save(EntityManager的)反模式
@MappedSuperclass
public abstract class AbstractEntity implements Serializable
{
...
public abstract AbstractEntity save(EntityManager em);
...
}
@Entity
public class ConcreteEntity extends AbstractEntity
{
...
public ConcreteEntity save(EntityManager em)
{
doSomeStuff(this);
ConcreteEntity merged;
if(id == null)
{
em.persist(this);
merged = this;
}
else
{
merged = em.merge(this);
}
doOtherStuff(merged);
return merged;
}
...
}
PRO:
- 具體的業務邏輯(REAL OO編程)
- 利用繼承來控制業務邏輯(另一種OO模式)
- 可以編寫通用的EJB
CON:
- 沒有呼籲級聯
- 合同除了:禁止撥打
em.persist(entity)
/em.merge(entity)
是否有別的東西,我忘了?
是不是隻是'ActiveRecord'模式擴展到包括聽衆('@ PreInsert'等..)的東西? – 2014-10-07 08:39:31
不知道這件事。是的,這是:) – 2014-10-10 06:25:33