java延迟加载 dbutils_用更简单的解决方案代替完整的ORM(JPA /休眠):推荐的加载/保存模式?...

我正在开发一个新的Java

Web应用程序,并且正在探索保存数据的新方法(对我来说是新的!)。我大多数都具有JPA和Hibernate的经验,但是,除了简单的情况之外,我认为这种完整的ORM可能会变得非常复杂。另外,我不太喜欢和他们一起工作。我正在寻找一个新的解决方案,可能更接近SQL。

我目前正在研究的解决方案:

纯 SQL / JDBC,可能带有DbUtils或其他一些基本实用程序库。

但是,与Hibernate相比,我担心的是这些解决方案有两个用例。我想知道这些用例的推荐模式是什么。

用例1-获取实体并访问其某些关联的子代和孙代实体。

假设我有一个Person实体。 它Person具有关联的Address实体。

它Address具有关联的City实体。 该City实体具有name属性。

从人员实体开始,访问城市名称的完整路径为:

person.address.city.name

现在,假设我PersonService使用以下方法从加载了Person实体:

public Person findPersonById(long id)

{

// ...

}

使用Hibernate,Person可以根据需要延迟加载与关联的实体,因此可以访问person.address.city.name并确保我可以访问此属性(只要该链中的所有实体都不为空)。

但是使用我正在研究的3个解决方案中的任何一个,它都更加复杂。使用这些解决方案,建议使用哪种模式来处理该用例?首先,我看到3种可能的模式:

所需要的所有关联的子代和孙代实体都可以通过所使用的SQL查询来快速加载。

但是我看到的这个解决方案的问题是,可能还有一些其他代码需要访问来自该实体的 其他

实体/属性路径Person。例如,也许某些代码需要访问person.job.salary.currency。如果要重用findPersonById()已有的方法,则SQL查询将需要加载更多信息!不仅关联address->city实体,而且关联job->salary实体。

现在,如果还有其他 10 个地方需要从人员实体开始访问其他信息,该怎么办?我是否应该始终热切地加载 所有

可能需要的信息?或者也许有12种不同的服务方法来加载人实体?:

findPersonById_simple(long id)

findPersonById_withAdressCity(long id)

findPersonById_withJob(long id)

findPersonById_withAdressCityAndJob(long id)

...

但是,每当我使用一个Person实体时,我就必须知道它已经加载了什么,没有加载了什么……可能会很麻烦,对吧?

在实体的getAddress()getter方法中Person,是否可以进行检查以查看地址是否已经加载,如果没有,则延迟加载它?这是现实生活中经常使用的模式吗?

还有其他模式可用于确保我可以从加载的模型访问所需的实体/属性吗?

用例2-保存实体,并确保还保存了其关联的和修改的实体。

我希望能够Person使用此PersonService方法保存实体:

public void savePerson(Person person)

{

// ...

}

如果我有一个Person实体并且要更改person.address.city.name为其他实体,那么City当我保存该实体时,如何确保该实体的修改将得以保留Person?使用Hibernate,可以很容易地将保存操作

级联 到关联的实体。我正在研究的解决方案如何?

我应该使用某种 肮脏的 标记来知道在保存人时还必须保存哪些关联的实体吗?

还有其他已知模式可用于处理此用例吗?

更新 :有一个讨论有关在JOOQ论坛这个问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值