JPA - 在运行时更改表

发布于 2024-09-12 18:15:09 字数 79 浏览 4 评论 0原文

表格 销售_2009 销售_2008 sales_2007

并且只有一个类(销售),如何在运行时更改表?

Tables
sales_2009
sales_2008
sales_2007

And only one class (sales), How change the table at runtime?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

机场等船 2024-09-19 18:15:09

如何在运行时更改表?

标准 JPA 不支持开箱即用。但实现可能会提供水平分区的扩展:

对于Slice的成熟度我无话可说。

另一种解决方案是定义三个不同的持久性单元,并在每个单元中专门映射 Sales 实体(可能使用 XML 映射来重用 Java 代码)。然后,从适当的 EntityManagerFactory 获取“正确的”EntityManager。但从内存的角度来看,这个解决方案并不理想(加上一些其他限制)。

另请参阅

How change the table at runtime?

That's not supported out-of-the-box by standard JPA. But implementation might provide extensions for Horizontal partitioning:

I can't say anything about the maturity of Slice.

An alternative solution would be to define three different persistence units and to map the Sales entity specifically in each of them (possibly using XML mappings to reuse the Java code). And then, obtain the "right" EntityManager from the appropriate EntityManagerFactory. This solution is not ideal from a memory point of view though (plus some other limitations).

See also

伪装你 2024-09-19 18:15:09

感谢您的回复,我用 iBATIS

在文件映射(xml)中解决了
select * from $table$ where date = #date# and Product_id = #product_id#

*在文件 Java 中 - 使用 Servlet 的示例:-

Map parameter = new HashMap(); 
parameter.put("table", "sales2009");
parameter.put("date", "2009-10-08"); //MySQL date :) 
parameter.put("product_id",17);

SqlMapClient sqlMap = (SqlMapClient) getServletContext().getAttribute("sqlMap");

List result = sqlMap.queryForList("selectSalesByParameters",parameter); 
for(Sales s : result) { }

重要: $table $ != #table 不起作用。

Thanks for the reply, I solved with iBATIS

In the file map (xml)
select * from $table$ where date = #date# and product_id = #product_id#

*In the file Java - example with Servlet:-

Map parameter = new HashMap(); 
parameter.put("table", "sales2009");
parameter.put("date", "2009-10-08"); //MySQL date :) 
parameter.put("product_id",17);

SqlMapClient sqlMap = (SqlMapClient) getServletContext().getAttribute("sqlMap");

List result = sqlMap.queryForList("selectSalesByParameters",parameter); 
for(Sales s : result) { }

Important: $table$ != #table is not working.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文