2016-12-12 2 views
0

У меня есть два поля отображаются в одном столбце:Hibernate - разные значения двух полей отображаются в одном столбце

@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; И Я не могу решить, почему это происходит.

Итак, в чем причина этого странного поведения?

ответ

1

Вы не должны хранить databaseId в своей сущности, это неверно. У вас есть правильное отображение.

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

Теперь, если вы хотите, чтобы получить значение идентификатора базы данных, вы можете просто использовать entity.getDatabase().getId() конец это заявление не будет выполнять никаких дополнительных запросов SQL, даже если вы используете отложенную загрузку.

Вы также можете использовать идентификатор базы данных в запросах.

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

Этот запрос не выполняет какое-либо соединение.

+0

Точно так же эквивалент базы данных внешним ключом является ссылкой Entity в JPA, вы не должны управлять ими как базовые столбцы. –