Orm 如何处理不带´;在域模型中没有表示吗?

Orm 如何处理不带´;在域模型中没有表示吗?,orm,Orm,这不是特定于任何语言的,它只是关于最佳实践。我正在使用JPA/Hibernate(但它可能是任何其他ORM解决方案),我想知道你们是如何处理这种情况的: 让我们假设您有一个查询返回的内容不是由任何域类表示的。 您是否创建了一个特定的类来表示该特定的查询? 是否以其他类型的对象(数组、映射…)返回查询 还有其他解决方案吗? 我想知道你的经验和最佳做法 附言。 实际上,我正在为特定查询创建特定对象。我通常编写一个函数,使用SQL执行查询,然后将结果放入列表或字典(在Java中,我使用ArrayLis

这不是特定于任何语言的,它只是关于最佳实践。我正在使用JPA/Hibernate(但它可能是任何其他ORM解决方案),我想知道你们是如何处理这种情况的: 让我们假设您有一个查询返回的内容不是由任何域类表示的。 您是否创建了一个特定的类来表示该特定的查询? 是否以其他类型的对象(数组、映射…)返回查询 还有其他解决方案吗? 我想知道你的经验和最佳做法

附言。
实际上,我正在为特定查询创建特定对象。

我通常编写一个函数,使用SQL执行查询,然后将结果放入列表或字典(在Java中,我使用ArrayList或HashMap)

如果我发现自己经常这样做,我可能会创建一个新文件来保存所有这些查询。否则,我只会让它们在需要/使用的任何文件中运行


因为我们专门讨论Java,所以我肯定不会在单独的文件中创建新类。但是,对于只在一个类中需要的查询,您可以创建一个私有静态内部类,其中只包含生成该类所需查询所需的函数。

将该函数包装到某种管理器中的想法总是很好的。它允许更好的测试和管理模式更改


还允许在应用程序中更容易地重用。永远不要直接把sql放进去!!!。对于Hibernate,我发现HQL非常适合这一点。特别是,如果可以使用命名查询。还要注意添加一个过滤器值等使用“字符串附加”,使用参数(我们可以说SQL注入?)。即使SQL在join或where条件方面是动态的,但在某种管理器中使用函数总是最好的。

我们的情况与您的情况类似

我们使用单独的对象来报告跨多个域对象的数据。我们的约定是,这些对象将由数据库中的视图支持,因此我们将它们称为视图对象。我们通常使用它们将复杂数据汇总成平面格式。

@drp

我会说得更具体一些。我们在一个数据库中有三个表

USER
PROJECT
TASK
USER to TASK 1:n
PROJECT to TASK 1:n
我有一个查询,返回所有项目的列表,但也显示一些分组信息(所有任务、打开的任务、关闭的任务)。返回时,查询如下所示

PROJECTID: 1
NAME: New Web Site
ALLTASK: 10
OPENTASK: 7
CLOSEDTASK: 3
我没有任何域类可以表示这些信息,我也不想在项目类中创建特定的方法(比如getAllTasks、getOpenTasks),因为这些方法中的每一个都会触发一个新的查询。 因此,问题是: 我创建了一个新类(比如ProjectTasksQuery)来保存这些信息? 我在数组或映射中返回信息?
还有别的事吗?

读了这篇文章后,你可能会感觉好些。有些人,但如果你觉得它很适合你,那很可能就是。

这就是我现在正在做的。我发现这是一个更实际的解决方案,我看到还有其他人也在这样做。好极了!