Объект обновляется в контролируемом объекте, а не обновляется в задании - PullRequest
1 голос
/ 31 января 2011

Привет, у меня проблема с моим проектом. У меня фоновая работа работает, который обновляет одну сущность. Проблема в том, что если я обновлю другая сущность из контроллера первый не реагирует на обновленный объект. Но если я пытаюсь получить доступ с контроллера второй Я вижу, что это было обновлено,

Вот код: Вторая сущность комплектация моделей;

import javax.persistence.Entity;

import play.db.jpa.Model;
@Entity
public class GameMap extends Model {
    static int convPx=16;   //converts game pixels in the map rap.
    int[][] array;
    public GameMap(int[][] array) {
        this.array=array;
    }

    public boolean isSolid(int x,int y){
        try{
        if (array[y][x]==0)
            return false;
        else
            return true;
        }catch(Exception e){
            return true;
        }
    }
    public String collides(GameObject object){      //TODO fix if it collides top and left scenario
        if(isSolid((object.x+object.width/2)/convPx,object.y/convPx))
            return "top";
        if(isSolid((object.x+object.width/2)/convPx,(object.y+object.height)/
convPx))
            return "bottom";
        if(isSolid((object.x)/convPx,(object.y+object.height/2)/convPx))
            return "left";
        if(isSolid((object.x+object.width)/convPx,(object.y+object.height/2)/
convPx))
            return "right";
        else
            return "false";
    }

    public void addPoint(int x, int y, int what) {
        array[x/convPx][y/convPx]=what;
        this.save();
    }
}

Я обновляю его, вызывая метод appPoint () с этого контроллера

public static void addMapPoint(int x, int y){
            GameMap map =(GameMap) GameMap.findAll().iterator().next();
            map.addPoint(x, y, 1);

    } 

Это работа, которая не обновляется

контроллеры пакетов;

import java.util.Iterator;
import java.util.List;

import models.Ball;
import models.GameMap;
import play.jobs.Job;

public class BallJob extends Job {
    public void doJob() {
        List<Ball> balls;
        try {
            Thread.sleep(1000);
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        new Ball(40,40,4,4,10,10).save();
        int[][] mapArr = {

{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},

{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},

{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},

{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},

{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},

{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},

{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},

{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},

{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},

{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},

{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},

{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},

{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},

{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},

{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},

{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},

{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},

{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},

{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},

{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},

{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},

{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},

{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},

{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},

{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},

{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},

{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},

{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},

{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1}
        };
        GameMap m= new GameMap(mapArr);
        m.save();
        Long time = System.currentTimeMillis();
        while (true){
        try {
            if(25-System.currentTimeMillis()+time>0){
                Thread.sleep(25-System.currentTimeMillis()+time);
            }
                time =System.currentTimeMillis();
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        balls = Ball.findAll();
/***************************************************************
****************************************************************
* This map doesn't change
****************************************************************
***************************************************************/
        GameMap map = (GameMap) GameMap.findAll().iterator().next();

        for (Iterator iterator = balls.iterator();
iterator.hasNext();) {
            Ball ball = (Ball) iterator.next();
            ball.applyForces();
            if(ball.collides(map)){
            ball.applyForces();
            }

        }
        }
    }

} 

Есть идеи? Спасибо

1 Ответ

1 голос
/ 31 января 2011

JPA не передает изменения из базы данных в существующие сущности в постоянный контекст. Я думаю, вам нужно обновить его:

map.refresh();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...