java在外键约束表上的添加和删除
我有两个实体和文件: 患者。爪哇:
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "personId", nullable = false, unique = true)
private Long personId;
@OneToMany(fetch = FetchType.EAGER,cascade= CascadeType.ALL)
@JoinTable(name="File_Patient")
private List<Files> files = new ArrayList<>();
档案。爪哇:
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "personId", nullable = false, unique = true)
private Long personId;
@Column(name = "fileName", nullable = true, unique = false)
private String fileName;
我正在使用json添加数据。一切进展顺利。我补充说:
"files": [
{
"personId": 3,
"fileName": "1A"
},
{
"personId": 4,
"fileName": "2B"
},
{
"personId": 5,
"fileName": "3C"
},
{
"personId": 6,
"fileName": "4D"
}
]
dao中我的updateperson方法:
public Patients updatePerson(String person) {
Patients result = new Patients();
JSONParser parser = new JSONParser();
JSONObject obj = (JSONObject) parser.parse(person);
try {
Long personId = (Long) obj.get("personId");
em = factory.createEntityManager();
String queryStr = "SELECT c FROM Patients c where c.personId = '" + personId + "'";
TypedQuery<Patients> query = em.createQuery(queryStr, Patients.class);
result = query.getSingleResult();
List<Files> f = result.getFiles();
if (obj.get("files") != null) {
boolean flag;
JSONArray files = (JSONArray) obj.get("files");
List<Files> fi = new ArrayList<>();
Files file = new Files();
for (int i = 0 ; i < files.size() ; i ++) {
log.info(files.get(i).toString());
file.setFileName(files.get(i).toString());
fi.add(file);
}
result.setFiles(fi);
}
em.getTransaction().begin();
em.merge(result);
em.getTransaction().commit();
}
} catch (Exception e) {
log.error("Exception caught :: " + e);
em.getTransaction().rollback();
}
em.close();
return result;
}
但情况是: 更新时,我将添加或不添加更多文件。代码需要检查并删除不在更新中的文件,然后添加新文件。 现在,我无法使用常用的em.remove()进行删除
添加时会出现以下错误: 捕获异常::java。lang.IllegalArgumentException:org。冬眠hql。内部的阿斯特。QuerySyntaxException:File_patient未映射[从File_patient f中选择f,其中f.files_personid='3']
你知道怎么做吗
共 (0) 个答案