【发布时间】:2014-09-05 12:37:10
【问题描述】:
我想知道我正在做什么来读取和更新我的数据库,它的方法和它的好习惯。
当我运行我的程序时,我将我的数据库加载到内存中:
public static void open() {
EntityManagerFactory emf = Persistence.createEntityManagerFactory("htTeamManagerPU");
EntityManager em = emf.createEntityManager();
TypedQuery<Season> query = em.createQuery("select s from Season s",Season.class);
seasons = query.getResultList(); }
通过这样做,我在我的数据库中保存了特定赛季的球员。
现在我有了我的 playerList,它是一个玩家列表,我想在内存中更新它,然后在我的数据库中更新该玩家。我可以做不同的事情,因为我已经在内存中拥有播放器,我仍然需要找到播放器并进行与之前在内存中所做的相同的更改?看来我做了两次同样的改变......
public void finishTraining(int id){
EntityManagerFactory emf = Persistence.createEntityManagerFactory("htTeamManagerPU");
EntityManager em = emf.createEntityManager();
em.getTransaction().begin();
for (Player player: playerList){
if (player.getPlayerId()==id) {
player.setIsTeam((short)0);
player.setIsToSell((short)1);
//no i find the player in my database with id primary key
Player p1 = em.find(Player.class, id);
//make the same changes i already did in memory
p1.setIsTeam((short)0);
p1.setIsToSell((short)1);
//submit my changes? there is another way of doing this?
em.getTransaction().commit();
}
}
em.close();
emf.close();
}
这工作正常并更新我的数据库。我想知道这是否是正确和最好的方法。谢谢
【问题讨论】:
-
您应该在您的应用程序中只创建一次
EntityManagerFactory(可能在启动时或缓存它们)。 -
您的问题的答案在这里:stackoverflow.com/questions/4543947/…
标签: jpa eclipselink