J'essaie d'ajouter des fonctionnalités personnalisées à un référentiel de données Spring. En utilisant ce comme point de départ http://docs.spring.io/spring-data/jpa/docs/current/reference/html/#repositories.single-repository-behaviour J'ai créé le code suivant:Méthodes personnalisées du référentiel de ressorts
public interface TableLock<T> {
void checkout(T entity);
void checkin(T entity, boolean cmpltBatch);
}
public interface BatchTableLock extends TableLock<MyEntity> {
}
public class BatchTableLockImpl implements BatchTableLock {
private static final Logger logger = LoggerFactory.getLogger(BatchTableLockImpl.class);
@PersistenceContext(unitName = "mysql")
private EntityManager em;
@Override
public void checkout(MyEntity batch) {
Long id = batch.getMyEntityId();
try {
MyEntity p = em.find(MyEntity.class, id, LockModeType.PESSIMISTIC_WRITE);
if (p == null) {
logger.error("checkout : MyEntity id {} must be valid", id);
throw new PessimisticLockException();
}
if (myCondition is true) {
return;
}
} catch (LockTimeoutException | PessimisticLockException e) {
logger.error("checkout : Unable to get write lock on MyEntity id {}", id, e);
}
throw new PessimisticLockException();
}
@Override
public void checkin(MyEntity batch, boolean cmplt) {
Long id = batch.getMyEntityId();
try {
MyEntity p = em.find(MyEntity.class, id, LockModeType.PESSIMISTIC_WRITE);
if (p == null) {
logger.error("complete : MyEntity id {} must be valid", id);
return;
}
if (this is true) {
if (cmplt) {
yep;
} else {
nope;
}
} else if (cmplt) {
logger.error("complete: Unable to complete MyEntity {} with status.", id);
}
} catch (LockTimeoutException | PessimisticLockException e) {
logger.error("complete : Unable to get write lock on MyEntity id {}", id, e);
}
}
}
@Repository
public interface MyDao extends CrudRepository<MyEntity, BigInteger>, BatchTableLock {
... My queries ...
}
malheureusement, je reçois l'erreur suivante:
org.springframework.data.mapping.PropertyReferenceException: No property checkin found for type MyEntity!
Ce si je ne me trompe pas signifie que le printemps tente de générer une requête basée sur la méthode 'checkin' et ne peut pas trouver un champ dans MyEntity avec le nom 'checkin'. ce qui est correct, il n'y a pas un tel champ. comment puis-je faire cesser de faire cela? basé sur le lien ci-dessus je ne pense pas qu'il devrait essayer de générer une requête pour cette méthode, mais il semble le faire de toute façon. Il se peut que je manque quelque chose, c'est généralement le cas, mais je ne vois pas ce que c'est.
Merci Oliver désolé pour la confusion et ma mauvaise interprétation de la documentation. – peekay