我有两个字段映射到同一列:
@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;
我无法解决为什么会发生这种情况。
那么,这种奇怪的行为可能是什么原因?
答案 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");
此查询不会执行任何联接。