【发布时间】:2014-04-28 11:40:43
【问题描述】:
我有两个由 OneToMany-ManyToOne 关系映射的 JPA 实体:
第一个实体:
@Entity(name = A.ENTITY_NAME)
@Table(name = A.TABLE_NAME)
@JsonIgnoreProperties(ignoreUnknown = true)
public class A implements Serializable{
private static final long serialVersionUID = -24345893264589748L;
public static final String TABLE_NAME = "A";
public static final String ENTITY_NAME = "A";
@Id
@NotNull
private String AName;
private String ADescription;
@OneToMany(fetch = FetchType.EAGER,mappedBy = "AName", cascade=CascadeType.ALL, orphanRemoval = true)
@JsonIgnore(true)
private List<B> b;
第二个实体:
@Entity(name = B.ENTITY_NAME)
@Table(name = B.TABLE_NAME)
public class B implements Serializable {
private static final long serialVersionUID = -24345893264589748L;
public static final String TABLE_NAME = "B";
public static final String ENTITY_NAME = "B";
@Id
@NotNull
private String BName;
@ManyToOne
@JoinColumn(name="AName")
private AName;
//Properties
我能够在我的 Oracle 数据库中创建表。
SQL> describe B;
Name Null? Type
----------------------------------------- -------- ----------------------------
BNAME NOT NULL VARCHAR2(255 CHAR)
...
ANAME VARCHAR2(255 CHAR)
现在我想在我的 Spring MVC 控制器中使用这些实体,如下所示:
@RequestMapping(value = B_CREATION_REQUEST_MAPPING, method = RequestMethod.POST)
@ResponseBody
public ResponseEntity<JSONResponse> createB(HttpServletRequest request,
@RequestBody B b) {
BSvc.createB(b);
ResponseEntity<JSONResponse> response = new ResponseEntity<JSONResponse>(new JSONResponse(), HttpStatus.OK);
REST_LOGGER.info("[" + request.getRemoteAddr() + "] B object "+b.getBName()+ " has been created" );
return response;
}
我对 A 对象有相同的控制器。
但是当我请求这个 B 控制器时,我必须在 JSON 中放入一个 A 对象,尽管请求无效:
{
"BName": "foo",
"AName": {"AName": "bar",
"ADescription": "too"
}
...
}
这会导致我出错:
org.hibernate.TransientObjectException: object references an unsaved transient instance - save the transient instance before flushing
我想要的只是放入我的 JSON 中:
{
"BName": "foo",
"AName": "bar",
...
}
而不是在 JSON 中创建对象 A。对象 A 之前是使用相同类型的控制器创建的,但我没有问题,因为没有外键。
我该如何解决这个问题?
【问题讨论】:
标签: json entity-framework hibernate spring-mvc jpa