Java JPA正删除由。。。在某些条件下不起作用
我想做一个简单的基于时间的策略游戏。。。 这是数据库连接:王国(OneToMany)->进程、建筑、资源、部队 进展、建设、资源、队伍“> 如果我这样做:Java JPA正删除由。。。在某些条件下不起作用,java,mysql,spring,hibernate,spring-data-jpa,Java,Mysql,Spring,Hibernate,Spring Data Jpa,我想做一个简单的基于时间的策略游戏。。。 这是数据库连接:王国(OneToMany)->进程、建筑、资源、部队 进展、建设、资源、队伍“> 如果我这样做: public void updateProgression(Kingdom kingdom) throws TroopNotFoundException, BuildingNotFoundException { List<ProgressionModel> progressions = kingdom.getKin
public void updateProgression(Kingdom kingdom) throws TroopNotFoundException, BuildingNotFoundException {
List<ProgressionModel> progressions = kingdom.getKingdomsProgresses();
for (ProgressionModel p : progressions) {
System.out.println(p.getId());
System.out.println(p.getType());
System.out.println(p.getGameObjectId());
System.out.println(p.getProgressKingdom().getId());
if (timeService.timeIsUp(p)) {
progress(p, kingdom);
}
}
}
在控制台中休眠查询:
Hibernate: select kingdomspr0_.kingdom_id as kingdom_5_3_0_, kingdomspr0_.id as id1_3_0_, kingdomspr0_.id as id1_3_1_, kingdomspr0_.game_object_id as game_obj2_3_1_, kingdomspr0_.kingdom_id as kingdom_5_3_1_, kingdomspr0_.time_to_progress as time_to_3_3_1_, kingdomspr0_.type as type4_3_1_ from progression kingdomspr0_ where kingdomspr0_.kingdom_id=?
1
FARM
null
1
Hibernate: select kingdomsre0_.kingdom_id as kingdom_7_4_0_, kingdomsre0_.id as id2_4_0_, kingdomsre0_.id as id2_4_1_, kingdomsre0_.amount as amount3_4_1_, kingdomsre0_.resource_per_minute as resource4_4_1_, kingdomsre0_.kingdom_id as kingdom_7_4_1_, kingdomsre0_.type as type5_4_1_, kingdomsre0_.updated_at as updated_6_4_1_, kingdomsre0_.dtype as dtype1_4_1_ from resources kingdomsre0_ where kingdomsre0_.kingdom_id=?
Hibernate: update resources set amount=?, resource_per_minute=?, kingdom_id=?, type=?, updated_at=? where id=?
Hibernate: insert into buildings (hp, kingdom_id, level, type) values (?, ?, ?, 'Farm')
1
它不会删除进程
但是,如果我调用JpaRepository内置查询来获取UpdateProgration方法中属于王国的所有进程:
List<ProgressionModel> progressions = progressionModelRepository.findAllByProgressKingdom(kingdom);
我无法解决这个问题。当然,如果我使用repository调用来获取属于王国的进程,代码会起作用,但我真的不明白为什么deleteById没有做任何事情,即使我向它传递了一个有效的Id。谢谢你的帮助!我希望该组合足够好,可以理解。这是我的第一个任务顺便说一句,请给我一些建设性的批评。你在JPA背后的行为上绊倒了 当您删除实体或以任何方式更新它时,JPA不会立即将更改写入数据库。 实际写入仅在刷新事件时发生,或者由于某些其他原因(如获取新创建实体的id)而有必要时发生 在以下情况下会触发刷新事件:
EntityManager
上显式调用flush。如果使用Spring Data JPA,则可以使用没有引发任何异常吗?您是否尝试过删除(progressionModel)?恕我直言,先生,请在回答之前阅读我的问题。
List<ProgressionModel> progressions = progressionModelRepository.findAllByProgressKingdom(kingdom);
Hibernate: select progressio0_.id as id1_3_, progressio0_.game_object_id as game_obj2_3_, progressio0_.kingdom_id as kingdom_5_3_, progressio0_.time_to_progress as time_to_3_3_, progressio0_.type as type4_3_ from progression progressio0_ where progressio0_.kingdom_id=?
1
FARM
null
1
Hibernate: select kingdomsre0_.kingdom_id as kingdom_7_4_0_, kingdomsre0_.id as id2_4_0_, kingdomsre0_.id as id2_4_1_, kingdomsre0_.amount as amount3_4_1_, kingdomsre0_.resource_per_minute as resource4_4_1_, kingdomsre0_.kingdom_id as kingdom_7_4_1_, kingdomsre0_.type as type5_4_1_, kingdomsre0_.updated_at as updated_6_4_1_, kingdomsre0_.dtype as dtype1_4_1_ from resources kingdomsre0_ where kingdomsre0_.kingdom_id=?
Hibernate: update resources set amount=?, resource_per_minute=?, kingdom_id=?, type=?, updated_at=? where id=?
Hibernate: insert into buildings (hp, kingdom_id, level, type) values (?, ?, ?, 'Farm')
1
Hibernate: delete from progression where id=?