java - Spring Hibernate查询与非主键的一对一关系
问题描述
我正在使用 Hibernate 在 Spring 上开发 Web 应用程序。
该 Web 应用程序基本上是一个在线商业网站,其中包含特定类别下的许多产品。
该应用程序支持产品的多种语言和单个产品图像的不同尺寸的图片,以便根据不同的用户设备进行优化。因此,用户可以根据自己的设备类型(如移动设备、iPad、台式机)选择他们希望以哪种语言查看产品描述,并获得不同尺寸的产品图像。
所以,我现在有六张桌子,如下所示。
产品表包含如图所示的产品
product_info 表包含英语、西班牙语和韩语等产品的不同语言的相同描述,如下图所示。
product_image 包含产品同一图片的不同尺寸图像的相对路径,如下图所示。
假设用户请求 category_id = 1(家具)、support_language_id = 1(英语)和 device_type_id = 1(移动设备)下的产品列表。然后,我想查询类似以下的内容,但在 HQL 中。
Select * from product pr
left join product_info pf
on p.id = pf.product_id
left join product_image pi
on p.id = pi.product_id
where category_id = category_id of user choice
and support_language_id = support_language_id of user choice
and device_type_id = device_type_id of user device
当我执行这个 HQL 查询时,我希望根据用户选择的 category_id、support_language_id 和 device_type_id 获得一个产品对象列表,其中每个产品对象只有一个 product_info 对象和一个 product_image 对象。
按照上面的例子,我会得到一个 id = 1 的产品对象,因为只有一个 category_id = 1 的对象。然后,产品对象将有 id = 1 的 product_info 对象和 id = 1 的 product_image 对象。
如何使用 Hibernate 将这种关系实现到 JPA 中?
我已经尝试过这种方法,但最终会出现错误,例如与非主键或其他键绑定。所以我想知道我的数据库设计是否首先存在结构问题。
你们能否为我提供一个完整的工作代码示例,其中包含所有这些 JPA 注释,例如 @JoinColumn、@OneToMany、@OneToOne 等等,好吗?
只要我能得到想要的结果,您就可以更改、添加和删除列或表。
解决方案
这里是一个不使用注解,只使用hql的解决方案,不知道会不会让你满意。
select p from Product p,ProductInfo pf,ProductImage pi where p.id = pf.productId and p.id = pi.productId and...
推荐阅读
- python - 迭代部分结果以构建没有列表的 JSON
- html - Srcset 属性选择了错误的图像
- python - Python 比嵌套 if 和 for 循环更好的处理分层数据的方法
- html - 仅在特定条件下交互的元素上的 Tabindex
- python - 使用数值积分找到坐标环所包围的区域
- python-3.x - 在 python 3.7 的标题下打印排序数据
- android - 使用 GSON 序列化具有多个泛型的类
- logstash-grok - 以 ns、us、ms 或 s 为单位的自定义响应时间的 Grok 模式 - logstash
- java - Java Swing Chatbot Messenger 集成
- kotlin - 如何在 datepicker andriod studio kotlin 中更新日期月份和年份