Java entitymanger.find使用外键的主键执行查找查询

Java entitymanger.find使用外键的主键执行查找查询,java,mysql,hibernate,Java,Mysql,Hibernate,我想使用主键获取EventDate的对象。下面是我正在执行的查询 EventData eventData = entityManager.find(EventData.class, eventdataid); 在控制台中执行此命令后,我得到如下查询 select eventsajgj0_.FILE_ID as FILE_ID8_14_0_, eventsajgj0_.id as id1_12_0_, eventsajgj0_.id as id1_12_1_, eventsajgj0_.CODE

我想使用主键获取EventDate的对象。下面是我正在执行的查询

EventData eventData = entityManager.find(EventData.class, eventdataid);
在控制台中执行此命令后,我得到如下查询

select eventsajgj0_.FILE_ID as FILE_ID8_14_0_, eventsajgj0_.id as
id1_12_0_, eventsajgj0_.id as id1_12_1_, eventsajgj0_.CODE as CODE2_12_1_,
eventsajgj0_.DATE as DATE3_12_1_, eventsajgj0_.FILE_ID as FILE_ID8_12_1_,
eventsajgj0_.MILLIS as MILLIS4_12_1_, eventsajgj0_.ORDER_NR as
ORDER_NR5_12_1_, eventsajgj0_.TYPE as TYPE6_12_1_, eventsajgj0_.VALUE as
VALUE7_12_1_ from eventdata eventsajgj0_ **where eventsajgj0_.FILE_ID=?**
order by eventsajgj0_.ORDER_NR
请注意,上述查询中的where子句针对的是file_idforeign键,而不是ideventdata主键

dao的结构如下

public class EventData implements Serializable {

        private static final long serialVersionUID = 1L;

        public EventData() {

        }

        @Id 
        @GeneratedValue(strategy=GenerationType.AUTO)
        private int id;

        @ManyToOne(fetch=FetchType.EAGER)
        @JoinColumn(name="FILE_ID")
        private ApplicationFile file;
       getter & setters

    }

public class ApplicationFile implements Serializable {
    private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue(strategy=GenerationType.AUTO)
    private int id;

    bi-directional many-to-one association to Event
    @OneToMany(mappedBy="file", cascade=CascadeType.ALL, fetch=FetchType.EAGER)
    @OrderBy("orderNr")
    private List<EventData> eventsajgjd;
    getter & setters
}

我敢打赌,因为您双向映射了EventData/ApplicationFile,所以ApplicationFile实体中有一个List类型的属性

因此,加载EventData意味着急切地加载相关的ApplicationFile,并急切地加载所有相关的EventData


我假设相关的ApplicationFile实例已经在EntityManager一级缓存中,否则查询应该在文件表上联接

您能提供生成的SQL吗?并显示相关表的创建表。创建表eventdata ID int11非空自动增量,文件ID int11默认为空,主键ID,键eventdata\u ibfk\u 1文件ID,CONSTRAINT eventdata\u ibfk\u 1外键文件\u ID引用DELETE CASCADE ENGINE=InnoDB AUTO\u INCREMENT=297502 DEFAULT CHARSET=UTF8上的文件ID以及正在执行的查询?您列出的查询是唯一正在执行的查询吗,find调用返回的EventData实体是预期的实体吗?但是我在entityManager.find之前尝试了entitymanger.clear,这应该会清除entityManager的缓存。但由于某些原因,它不起作用。
CREATE TABLE eventdata (
    ID int(11) NOT NULL AUTO_INCREMENT, 
    FILE_ID int(11) DEFAULT NULL, 
    PRIMARY KEY (ID), 
    KEY eventdata_ibfk_1 (FILE_ID), 
    CONSTRAINT eventdata_ibfk_1 FOREIGN KEY (FILE_ID)
               REFERENCES files (ID) ON DELETE CASCADE
) ENGINE=InnoDB AUTO_INCREMENT=297502 DEFAULT CHARSET=utf8