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

时间:2016-12-12 13:17:01

标签: java hibernate jpa

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

@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;

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

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

1 个答案:

答案 0 :(得分:1)

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

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

现在,如果要获取数据库ID值,可以使用entity.getDatabase().getId()结束此语句将不执行任何其他sql查询,即使您使用延迟加载。 < / p>

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

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

此查询不会执行任何联接。