2012-01-16 57 views
2

我有大约100,000个我想要插入数据库的对象。我想利用Spring/Hibernate并创建List<MyPojo>并使用session.saveOrUpdate()来执行插入。Spring/Hibernate - 如何通过外键ID插入记录?

但是,MyPojo对象包含大约25个外键。要通过Id执行这么多的查找来获得实际引用的对象将是非常低效的。

因此,我想只使用外键id(与存储在数据库中的方式相同),而不是加载每个对象。

在运行本机查询之外,是否有另一种解决方案来执行此操作?

谢谢!

+0

这是功课的一部分吗?或者你自己的自学。因为拥有一张25个外键的桌子是很难相信的。我会认真考虑首先正常化/重新设计我的数据库模式。 – Gaurav 2012-01-16 18:05:53

+0

这是一张现有的表格,其背后的理由超出了范围。我只是想知道是否可以通过Spring /休眠 – user973479 2012-01-16 18:34:42

回答

2

您可以通过映射外键和对象,但将对象标记为懒惰而不是“可更新”而不是“可插入”。

这是对象,但不用于写入值。

@ManyToOne(fetch = FetchType.LAZY) 
@JoinColumn(name = "MY_POJO_FK", insertable = false, updatable = false) 
private MyPojo myPojo; 

下面是通常

@Column(name = "MY_POJO_FK") 
private Long myPojoFK; 

这种方法的缺点是你必须单独(无级联)更新的异物,但好处是,你将不会加载外国映射的外键对象,直到你需要它们。

如果您只是将其映射为写入数据,则根本不需要担心映射对象。

+0

来做到这听起来像我正在寻找的东西。我会尝试一下。谢谢! – user973479 2012-01-16 19:02:48