Home » Eclipse Projects » EclipseLink » update query and stale cache
update query and stale cache [message #662935] |
Fri, 01 April 2011 14:14 |
anil chalil Messages: 38 Registered: October 2010 |
Member |
|
|
Hi,
I have a repository function that enable/disable an entity here is the code:
@Override
public int updateCrewMemberStatus(CrewMember crewMember, boolean status) {
Query query = entityManager
.createQuery("update CrewMember c set c.enabled=:status where c=:crewMember");
query.setParameter(query.getParameter("crewMember", CrewMember.class),
crewMember);
query.setParameter(query.getParameter("status", Boolean.class), status);
return query.executeUpdate();
}
and here is the test code:
@Test
public void testupdateCrewMemberStatus() {
Pilot pilot = createPilot();
crewMemberRepository.save(pilot);
crewMemberRepository.getEntityManager().flush();
assertEquals(1,
crewMemberRepository.updateCrewMemberStatus(pilot, false));
crewMemberRepository.getEntityManager().flush();
CrewMember crewMember = crewMemberRepository.findById(pilot.getId());
Boolean queryForObject = simpleJdbcTemplate.queryForObject(
"select enabled from CREWMEMBER where id=?", Boolean.class,
crewMember.getId());
LOGGER.debug(crewMember.toString() + " but queryObject: "
+ queryForObject);
}
When i run test it gives me a crewmember object with enabled field "true". But queryForObject variable is "false"(crewmember entity ,i think,also have to have enabled field false since it is already updated). Here is the debug output:
17:12:34.052 [main] INFO o.s.t.c.t.TransactionalTestExecutionListener - Began transaction (3): transaction manager [org.springframework.orm.jpa.JpaTransactionManager@591bfcbe]; rollback [true]
[EL Fine]: 2011-04-01 17:12:34.052--ClientSession(37605958)--Connection(683143888) --Thread(Thread[main,5,main])--INSERT IGNORE INTO CREWMEMBER (ID, ENABLED, NAME, SURNAME, ADDRESS, EMAIL, PHONENO, CREW_TYPE) VALUES (?, ?, ?, ?, ?, ?, ?, ?)
bind => [3, true, test, test, test, test@test.com, 12334, PILOT]
[EL Fine]: 2011-04-01 17:12:34.053--ClientSession(37605958)--Connection(683143888) --Thread(Thread[main,5,main])--INSERT IGNORE INTO PILOT (RANK, ID) VALUES (?, ?)
bind => [CAPTAIN, 3]
[EL Fine]: 2011-04-01 17:12:34.573--ClientSession(37605958)--Connection(683143888) --Thread(Thread[main,5,main])--UPDATE CREWMEMBER SET ENABLED = ? WHERE (? = ID)
bind => [false, 3]
[EL Fine]: 2011-04-01 17:12:34.576--ClientSession(37605958)--Connection(683143888) --Thread(Thread[main,5,main])--SELECT DISTINCT CREW_TYPE FROM CREWMEMBER WHERE (ID = ?)
bind => [3]
[EL Fine]: 2011-04-01 17:12:34.578--ClientSession(37605958)--Connection(683143888) --Thread(Thread[main,5,main])--SELECT t0.ID, t0.CREW_TYPE, t0.ENABLED, t0.NAME, t0.SURNAME, t0.ADDRESS, t0.EMAIL, t0.PHONENO, t1.ID, t1.RANK FROM CREWMEMBER t0, PILOT t1 WHERE ((t0.ID = ?) AND ((t1.ID = t0.ID) AND (t0.CREW_TYPE = ?)))
bind => [3, PILOT]
17:12:34.583 [main] DEBUG o.s.jdbc.core.JdbcTemplate - Executing prepared SQL query
17:12:34.584 [main] DEBUG o.s.jdbc.core.JdbcTemplate - Executing prepared SQL statement [select enabled from CREWMEMBER where id=?]
17:12:34.589 [main] DEBUG m.b.m.i.p.CrewMemberRepositoryTest - CrewMember [id=3, name=test, surname=test, contactInfo=ContactInfo [email=test@test.com, phoneNo=12334, address=test], enabled=true] but queryObject: false
I could not understand the behaviour of the cache here. Why did't it update? Also if i put enetityManager.refresh in updateCrewMemberStatus before return then it is working. Any idea?
|
|
| |
Goto Forum:
Current Time: Fri Apr 26 16:23:38 GMT 2024
Powered by FUDForum. Page generated in 0.03018 seconds
|