我的班级是AbstractJpaDao方法
@Override
public EntityManager getEntityManager() {
return em;
}
现在它没有被使用,我想删除它,但我收到错误:
类型JpaAclIdentityDao
必须在类IJpaDao.getEntityManager()
中实现继承的抽象方法JpaAclIdentityDao
。
是否需要吸气剂?如果不是如何删除它
我的代码:
public abstract class AbstractJpaDao implements IJpaDao {
protected final IApplicationConfig config;
protected final EntityManager em;
private final SingletonEventBus eventBus;
public AbstractJpaDao(EntityManager entityManager, IApplicationConfig config, SingletonEventBus eventBus) {
checkArgument(entityManager != null);
checkArgument(config != null);
checkArgument(eventBus != null);
this.em = entityManager;
this.config = config;
this.eventBus = eventBus;
}
protected void saveEntity(IEntity entity) {
boolean isNew = entity.getId() == 0;
em.getTransaction().begin();
try {
em.persist(entity);
em.getTransaction().commit();
if (isNew) {
eventBus.post(new EntityCreatedEvent(entity));
}
} finally {
if (em.getTransaction().isActive()) {
em.getTransaction().rollback();
}
}
}
@Repository
public class JpaAclIdentityDao extends AbstractJpaDao implements IAclIdentityDao {
public static final String GROUP_NAME_PATTERN = "GROUP_%d";
private static final String GROUP_TEMP_NAME = "TEMP_GROUP_NAME";
@Inject
public JpaAclIdentityDao(EntityManager entityManager, IApplicationConfig config, SingletonEventBus eventBus) {
super(entityManager, config, eventBus);
}
@Override
public AclIdentity findById(Object id) throws EntityNotFoundException {
return em.find(AclIdentity.class, id);
}
@Override
public List<AclIdentity> findAll() {
return findAllByType(AclIdentity.class);
}
@Override
public void delete(AclIdentity entity) {
// TODO Auto-generated method stub
}
@Override
public void save(AclIdentity entity) {
saveEntity(entity);
}
@Override
public AclIdentity createNew(String sid, boolean principal) {
AclIdentity identity = new AclIdentity(sid, principal);
save(identity);
return identity;
}
@Override
public AclIdentity createNew(User entity) {
return createNew(entity.getEmail(), true);
}
@Override
public AclIdentity createNew(Group entity) {
AclIdentity identity = createNew(GROUP_TEMP_NAME, false);
identity.setSid(String.format(GROUP_NAME_PATTERN, identity.getId()));
save(identity);
return identity;
}
}
答案 0 :(得分:4)
是的,您必须实现在已实现的接口中定义的所有方法。我能想到的唯一可能的解决方案是实现该方法并将其留空,或者不实现该接口。 或者,正如ben75所说,如果您不需要它(在任何地方),只需删除界面“IJpaDao”声明中的方法。
答案 1 :(得分:2)
方法getEntityManager
在IJpaDao
(或一个超级界面)中定义,这就是您需要在班级中提供它的实现的原因。
如果它根本不使用(即使你正在使用某些框架中的某些反射机制),那么你可以从IJpaDao
删除它,你将不会被迫实现它。
答案 2 :(得分:2)
如果您不想使用它,请抛出UnsupportedOperationException:
public class JpaAclIdentityDao extends AbstractJpaDao ... { // Or AbstractJpaDao...
// Some Code...
public EntityManager getEntityManager() {
throw new UnsupportedOperationException();
// return null; (This is not needed, due to the exception thrown above. Thanks dedek!)
}
// More Code...
}
由于OO编程,如果具体类使用抽象方法继承类/接口,则必须定义该方法,或者使您的类抽象化并将其传递给行,就像您所做的那样与AbstractJpaDao。
答案 3 :(得分:1)
我猜测接口IJpaDao包含一个getEntityManager抽象方法。