小编Joh*_*ohn的帖子

Hibernate错误:具有相同标识符值的不同对象已与会话关联

我在这个配置中基本上有一些对象(真正的数据模型有点复杂):

  • A与B有多对多的关系.(B有inverse="true")
  • B与C有多对一的关系.(我已经cascade设定"save-update")
  • C是一种类型/类别表.

另外,我应该提一下主键是在保存时由数据库生成的.

对于我的数据,我有时会遇到A有一组不同B对象的问题,这些B对象引用相同的C对象.

当我打电话时session.saveOrUpdate(myAObject),我得到一个休眠错误说:"a different object with the same identifier value was already associated with the session: C".我知道hibernate不能在同一个会话中两次插入/更新/删除同一个对象,但有什么方法可以解决这个问题吗?这似乎不是一种不常见的情况.

在我研究这个问题的过程中,我看到人们建议使用session.merge(),但是当我这样做时,任何"冲突"对象都会作为空白对象插入到数据库中,所有值都设置为null.显然,这不是我们想要的.

[编辑]我忘记提到的另一件事是(由于我无法控制的架构原因),每次读取或写入都需要在单独的会话中完成.

java hibernate

79
推荐指数
7
解决办法
24万
查看次数

带有Spring Boot的JSON和HTML控制器

我正在编写一个应用程序,其中包括我需要对某些对象进行CRUD操作.我需要能够为人类用户提供HTML页面,为其他应用程序提供JSON.现在我的网址对于"阅读"看起来像这样:

GET  /foo/{id}      -> Serves HTML
GET  /rest/foo/{id} -> Serves JSON
etc.
Run Code Online (Sandbox Code Playgroud)

这似乎有点多余.我宁愿有这样的事情:

GET /foo/{id}.html OR /foo/{id} -> Serves HTML
GET /foo/{id}.json              -> Serves JSON
Run Code Online (Sandbox Code Playgroud)

Spring Boot可以这样做吗?如果是这样,怎么样?

我知道如何返回JSON:

@RequestMapping(value = "/foo/{id}", method = RequestMethod.GET, produces = "application/json")
public Object fetch(@PathVariable Long id) {
    return ...;
}
Run Code Online (Sandbox Code Playgroud)

我也知道如何返回HTML:

@RequestMapping("/app/{page}.html")
String index(@PathVariable String page) {
    if(page == null || page.equals(""))
        page = "index";
    return page;
}
Run Code Online (Sandbox Code Playgroud)

但我不知道如何让控制器根据请求做一个或另一个.

spring json spring-mvc spring-boot

5
推荐指数
1
解决办法
3万
查看次数

标签 统计

hibernate ×1

java ×1

json ×1

spring ×1

spring-boot ×1

spring-mvc ×1