2017-07-06 2 views
0

Salut J'ai besoin d'écrire des cas de test junit pour le référentiel JPA. Le code est comme ci-dessous.Écris un junit pour le référentiel JPA

Le test est écrit comme ci-dessous. J'ai déjà ajouté @ContextConfiguration sur la classe.

@Autowired 
@Qualifier("repository") 
private Repository repository; 

@Test 
public void testCreate() { 
    Object objRequest = getObjForRequest(); 
    Object obj = repository.create(objRequest); 
    assertTrue(obj.getId().equals(objRequest.getId())); 
} 

private Object getObjForRequest() { 
    Object obj = new Object(); 

    obj.setId(1); 

    return obj; 
} 

Mon référentiel est écrit comme ci-dessous.

@Repository("repository") 
public class Repository implements RepositoryInterface { 

     @PersistenceContext 
     private EntityManager entityManager; 

     @Transactional(value = "springJpaTransactionManager") 
     @Override 
     public Object create(Object obj) { 
      Object ob = obj; 
      entityManager.persist(ob); 
      entityManager.flush(); 
      return ob; 
     } 
} 

Lorsque j'exécute un cas de test, cela me donne une erreur ci-dessous.

javax.persistence.PersistenceException: org.hibernate.PersistentObjectException: detached entity passed to persist:com.*.*.Object 

Quelqu'un peut-il m'aider à résoudre ce problème?

Merci

Répondre

1

supprimer setId de:

private Object getObjForRequest() { 
    Object obj = new Object();  
    obj.setId(1);  
    return obj; 
} 

vous ne devez pas définir id, comme id généré lorsque l'objet se persista id DB. Lorsque vous appelez repository.create (objRequest) avec id, les données printanières vérifient ce qu'elles devraient être - création d'un nouvel objet ou d'une mise à jour, et cette vérification est basée sur id! = Null;

vous devriez vérifier:

assertNoNull(obj.getId()); 
    assertTrue(obj.getId().longValue()>0); 

vous pouvez comparer cet identifiant comme prévu que si vous mettez à jour une entité existait.

+0

C'était juste une erreur stupide !! Merci une tonne mate !! –