我正在构建一个简单的Spring + Hibernate应用程序,我有以下模型:
Link ( id, url, title )
History ( link_id, report_time, number_of_likes )
在我的Main方法中,我有类似的东西:
public static void main(String[] args) {
ApplicationContext context =
new ClassPathXmlApplicationContext(new String[] {"spring.xml"});
...
((LinkDao) context.getBean("linkDao")).updateAll(date);
...
}
此应用每30分钟运行一次;进入 LINK 表格,并在 HISTORY 表格中记录当时Facebook喜欢的数量。
现在问题是我需要在位于 LinkDaoImpl 内的updateAll(Date date)方法中将记录插入 HISTORY 表中strong>但我无法从 LinkDaoImpl 访问 HistoryDaoImpl ,除非我将上下文传递给 < EM> LinkDaoImpl 即可。如果我包括:
@OneToMany
List<History> history
Inside Link模型,Hibernate创建了一个额外的 HISTORY_LINK 表,这是不必要的。
这样做的正确方法是什么?
答案 0 :(得分:0)
您需要在mappedBy="link"
中添加@OneToMany
。当您使用关系@ManyToOne
时,映射默认使用@JoinColumn
,但在@OneToMany
中您必须指定关系的所有者
答案 1 :(得分:0)
听起来你需要将linkDao.updateAll中包含的一些逻辑提取到服务类。服务类可以执行交叉模型工作,并让您的DAO只修改它们应该的表。然后将两个DAO注入服务类。
答案 2 :(得分:-1)
当您使用@OneToMany注释时,Hibernate将始终在实体关系之间创建一个新表,即使您没有看到它的实际用途。
所以,在这种情况下你应该尝试@OneToOne注释,或者只是接受Hibernate创建的新表。