#java #hibernate #jpa
#java #спящий режим #jpa
Вопрос:
Моя сущность выглядит следующим образом:-
@Entity
@Table(name = "state")
@JsonIdentityInfo(generator = ObjectIdGenerators.IntSequenceGenerator.class, property = "@id")
public class State implements java.io.Serializable {
private Integer id;
private Country Country;
private String name;
@Id
@GeneratedValue(strategy = IDENTITY)
@Column(name = "id", unique = true, nullable = false)
public Integer getId() {
return this.id;
}
public void setId(Integer id) {
this.id = id;
}
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "country", nullable = false)
@JsonManagedReference(value="country-state")
public Country getCountry() {
return this.country;
}
public void setCountry(Country country) {
this.country = country;
}
}
В этом объекте вместо целой страны я просто хочу получить значение идентификатора внешнего ключа…
Для прямого доступа к внешнему ключу (id) есть ли какая-либо опция в Hibernate?
Ответ №1:
Вы также можете добавить (в зависимости от вашего имени столбца идентификатора):
@Column(name = "COUNTRY_ID")
private Long countryId;
Ответ №2:
Обходным путем является добавление фиктивного свойства к вашему объекту и установка его как insertable = false, updatable = false
.
String countryKey;
@Column(name = "country", insertable = false, updatable = false)
public String getCountryKey() {
return this.countryKey;
}
Комментарии:
1. Он работает на Java, но выдает ошибку, когда объект преобразуется в JSON с помощью FasterXML-Jackson с сообщением об ошибке «Невозможно преобразовать в JSON»
2. Это еще одна проблема. Не могу помочь, так как я этим не пользовался. Может быть, вы также можете попробовать добавить фиктивный установщик
setCountryKey()
?3. У нас уже есть установщик, мы получаем следующую ошибку error»: «Ошибка внутреннего сервера», «статус»: 500, «исключение»:»org.springframework.http.converter. HttpMessageNotWritableException», «сообщение»: «Не удалось записать JSON: не удалось инициализировать прокси-сервер — нет сеанса (через цепочку ссылок: java.util. ArrayList[0]->com.test.myapp.domain.State[«country»]
4. Вы должны исключить коллекции отложенной выборки из сериализации JSON.