java - 休眠和查询视图。结果计数正常,但所有行都相同,但它们不在数据库中
问题描述
我有一个代表(mysql)数据库视图的实体:
@Entity
@Immutable
@Table(name = "user_info_view")
public class UserInfoView implements Serializable {
@Id
@Column(name = "user_uuid")
private String userUUID;
@Column(name = "name")
private String name;
@Column(name = "address")
private String address;
//getters, setters, constructors...
}
该视图是使用简单的 SQL 创建的,例如:
CREATE OR REPLACE VIEW USER_INFO_VIEW
AS
SELECT u.USER_UUID,
u.NAME,
a.ADDRESS
FROM
USER u
JOIN
ADDRESS a
ON a.ID = u.ADDRESS_ID
和一个存储库:
@Repository
public interface UserInfoViewRepository extends JpaRepository<UserInfoView, String> {
List<UserInfoView> findAllByUserUUID(String userUUID);
}
SELECT * FROM USER_INFO_VIEW
正在返回 4 行。运行findAllByUserUUID()
方法返回一个包含 4 个UserInfoView
对象的列表,但它们都是相同的 - 它们包含数据库第一行的数据。
以下是对数据库的查询结果:
从用户中选择 *:
id | user_uuid | name | address_id |
------------------------------------
1 | UUID1 | john | 1 |
2 | UUID1 | jane | 2 |
3 | UUID1 | josh | 3 |
4 | UUID1 | mark | 4 |
------------------------------------
SELECT * FROM ADDRESS:
id | address | name | is_current |
----------------------------------------------
1 | some address 1 | addr1 | 1 |
2 | some address 2 | addr2 | 0 |
3 | some address 3 | addr3 | 1 |
4 | some address 4 | addr4 | 1 |
----------------------------------------------
SELECT * FROM USER_VIEW WHERE USER_UUID = "UUID1":
user_uuid | name | address |
---------------------------------------
UUID1 | john | some address 1 |
UUID1 | jane | some address 2 |
UUID1 | josh | some address 3 |
UUID1 | mark | some address 4 |
---------------------------------------
什么可能导致这种行为?
解决方案
该user_uuid
列不是唯一的事实会导致重复,因为它被标记为 @Id 并且 JPA 使用它的值来查找实体。您将需要使用包含识别属性的 an或 an的复合 PK 。IdClass
EmbeddedId
推荐阅读
- flutter - 完成文本输入后 Flutter TextFormField 调用值更改方法
- sql - Oracle SQL 中的 FIRST 和 LAST 值
- android - Android Studio 4.1:矢量绘图中的主题属性导致 java.lang.IllegalArgumentException
- c# - 如何使用 C# 创建一个显示不同线程进程的程序
- oracle - 从时间中提取小时
- c# - C# 从 JSON 子级获取密钥/名称
- pytorch - Pytorch - RuntimeError:无效的多项分布(遇到概率条目< 0)
- r - 使用向量访问和更新一个 data.table 列
- python-3.x - 如何为主题创建或设置分区数?
- vue.js - vue 3 指令监听 vue 发射