java - MySQL内部连接错误:在执行查询期间检测到为空。主键不能包含 null
问题描述
我想关联两个表上的特定列并根据时间戳取回匹配值,即同时发生但写在两个单独表上的事件。我使用MYSQL INNER JOINS
如下:
到目前为止,我的查询如下所示:
String threatQueryJoin = "SELECT awsevents.ALERT.resourceName, awsevents.RECORD.Record_Id,awsevents.RECORD.resourceName, "
+ "awsevents.ALERT.alert_id FROM awsevents.ALERT inner join awsevents.RECORD on awsevents.ALERT.resourceName "
+ "= awsevents.RECORD.resourceName where (awsevents.ALERT.timeStamp >= '2019-05-10' AND awsevents.RECORD.timeStamp >= '2019-05-10') "
+ "AND (awsevents.ALERT.resourceName='company-checker-log-963f5e78-0dea-46f1-9a48-5a116bdae350' "
+ "AND awsevents.RECORD.resourceName='company-checker-log-963f5e78-0dea-46f1-9a48-5a116bdae350') order by awsevents.RECORD.timeStamp";
Query q = AWSEventsDAO.em.createNativeQuery(threatQueryJoin);
List ll = q.getResultList();
查询的响应MySQL workbench
看起来不错:
但是,我想将结果写入另一个表。由于我不精通MySQL
,我很高兴知道是否有更好的方法来处理此类查询。使用inner join
,我有以下错误:
Exception Description: The primary key read from the row [ArrayRecord(
=> company-checker-log-963f5e78-0dea-46f1-9a48-5a116bdae350
=> 45167
=> company-checker-log-963f5e78-0dea-46f1-9a48-5a116bdae350
=> 8108)] during the execution of the query was detected to be null. Primary keys must not contain null.
解决方案
我已经通过删除mapped class
ieRecord.class
并使用解决了这个问题
Object[] alert = threatList.get(i);
如这些教程中所示,在jpa
和上native queries
。事实证明,EntityManager
返回一个 Object[] 列表,之后需要处理。
推荐阅读
- python-3.x - 为什么我的函数没有在 CLI 中打印任何内容?
- python - flask-migrate 按字母顺序进行迁移
- arrays - 如何更改多次索引的数组的值?
- ios - 二元运算符“==”不能应用于“(Any)-> Int”和“Int”类型的操作数
- mongodb - Mongo-go如何使用arrayFilter在“对象数组中的对象数组”中查找elem
- javascript - 使用 Puppeteer 操作/设置样式 shadowRoot
- laravel - Laravel,作曲家更新。没有这样的文件 app/Helpers/Functions/core.php
- c# - 在一个表中创建所有用户的子查询,该表的 id 在另一个表中
- android - Unable to load class 'com.sun.istack.FinalArrayList'
- javascript - 包含大量特殊字符数组的 JS 函数不起作用