gpt4 book ai didi

java - Hibernate - 映射同一列的两个字段的不同值

转载 作者:行者123 更新时间:2023-12-01 09:07:59 25 4
gpt4 key购买 nike

我有两个字段映射到同一列:

@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "database_id", nullable = false, insertable = true, updatable = true)
private Database database;

@Column(name = "database_id", nullable = false, insertable = false, updatable = false)
private long databaseId;

当我从数据库读取实体对象时:entityManager.find(entityClass, id);有时 entity.getDatabase().getId() 具有正确的值,但 entity.getDatabaseId() = 0;而且我无法解决为什么会发生这种情况。

那么,这种奇怪行为的原因可能是什么?

最佳答案

您不应将 databaseId 保留在您的实体中,这是不正确的。您有正确的映射。

@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "database_id", nullable = false, insertable = true, updatable = true)
private Database database;

现在,如果你想获取数据库id值,你可以只使用entity.getDatabase().getId()结束这个语句不会执行任何额外的sql查询,即使如果您使用延迟加载。

您还可以在查询中使用数据库 ID。

Query q = em.createQuery("select e from MyEntity e where e.database.id = :id");

此查询不执行任何联接。

关于java - Hibernate - 映射同一列的两个字段的不同值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41101783/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com