有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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) 个答案