如何将JSON字符串存储为实体的属性

时间:2015-08-13 14:00:56

标签: java json spring-mvc jpa

我正在制作游戏(尝试......),就像使用Spring MVC的大学风险一样。我正在使用JPA,我需要在用JSON编码的字符串字段中保存游戏的状态(其播放器转向,国家/地区中的单位等),这就是让我发疯的原因。 首先,我用其他信息(id,用户的所有者,状态......)创建游戏,当它第一次启动时,我想生成JSON并将其设置为实体并保存。我尝试使用entityManager.merge(游戏),但是当我查看数据库时,JSON字段为空。我尝试使用namedquery和nativequery但是在JSON字符串中“它是一团糟。 任何想法为什么它不合并储蓄? 代码类似于:

HomeController.class

public String getGame(@PathVariable("idGame") long idGame,
        Model model) throws IOException {           
        Game g = GameDao.getGame(idGame);
        if  (g.getJson == null) {
            g.initializeGame(); // it sets the json attribute
            GameDao.update(entityManager, g);
        }
}

GameDAO.class

@Transactional
public static Game update(EntityManager entityManager, Game g) {
    try {       
        entityManager.merge(g); // if I debug here g has the json attribute setted
        return entityManager.find(Game.class, g.getId()); // the game object that's returned hasn't the json field setted
    } catch (Exception e) {
        e.printStackTrace();
        return null;
    }
}

这是回购https://github.com/alvardsoler/reinvasion,但它是西班牙语中最多的。这是九月考试,我没有太多时间,所以我想先把它做得非常粗略,然后如果我有时间,我会做得很好。如果我无法在数据库中保存JSON信息,我会将其保存在服务器中具有游戏ID或类似内容的文件中。

2 个答案:

答案 0 :(得分:1)

我发现了问题。我使用createNativeQuery进行更新:

Query q = entityManager.createNativeQuery("update Game g SET   g.json=:json where g.id=:id");
q.setParameter("json", g.getJson());
q.setParameter("id", g.getId());
q.executeUpdate();

并在GameDAO方法和HomeController方法中添加了@Transactional ...

答案 1 :(得分:0)

使用库GSON(jsonString)非常容易:

box-shadow