【发布时间】:2015-01-08 21:01:15
【问题描述】:
背景:
我正在使用基于 JSON 的 CRUD 功能制作页面。这些页面具有通过 Knockout.js 填充我的实体的选择列表。我有一个实体Contract 与我的另一个实体Organization 具有当前可以为空的多对一关系contractHolder。
只要contractHolder 为空,我就可以通过我的 Roo 生成的控制器通过 JSON 成功创建 Contract。
无论我提供的是整数 ID(java.lang.Integer 不能转换为 java.util.Map)还是完整的 JSON 对象,我尝试创建具有非空关系的 Contract 都以错误告终(org.hibernate.TransientObjectException:对象引用了一个未保存的瞬态实例)。
总而言之,我正在尝试使用由选择列表确定的 contractHolder 保存 Contract。
Contract.java
public class Contract {
/* ... */
//@NotNull
@ManyToOne
private Organization contractHolder;
/* ... */
}
Organization.java
public class Organization {
/* ... */
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "id")
private Long id;
/* ... */
}
【问题讨论】:
-
暂时忘掉缩写词,先去 json.org 学习 JSON 语法。然后研究 Java Map 和 List 接口定义,了解它们如何映射到 JSON“对象”和“数组”。
-
@HotLicks 感谢您的快速评论!我可以成功地将所有内容反序列化并返回到我的对象中,但最后我绊倒了。
-
我不知道您使用的是什么 JSON 工具包(Java 至少有 20 个),但您的错误表明您有一些基本的误解。 (而且您在此处提供的信息不足以成为有效的“问题”。)
-
我发现我对 Hibernate 的基本误解。您是否会建议我在我的问题中添加更多信息、回答我的问题或其他内容?
-
写一个简短的答案,解释你误解的根源。在(我认为是 3 天)等待期之后,将该答案标记为“已接受”。
标签: json spring-mvc knockout.js spring-roo