Я думал реализовать антишаблон, так как @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:
- конкретной бизнес-логика находится внутри объекта (РЕАЛ программирование OO)
- делают использование наследования для управления бизнес-логики (другой OO шаблон)
- можно написать общий EJB
CON:
- не называется по каскадной
- контракта Дополнительно: запрещено называть
em.persist(entity)
/em.merge(entity)
Есть ли что-то еще я забыл?
Разве это не шаблон 'ActiveRecord', расширенный для включения Listeners (' @ PreInsert' и т. Д.)? –
Не знал об этом. Да, это :) –