#hibernate #jpa #jaxb #jax-rs
#спящий режим #jpa #jaxb #jax-rs
Вопрос:
Я создал объект JPA для таблицы БД. Существует логическое поле «isPreferred». Если я получаю записи таблицы, у меня есть повторяющиеся поля в ответе. Один с «предпочтительным» = true и один с «isPreferred» = true. Я ожидаю только поля isPreferred. Как я могу решить эту проблему?
Я уже пробовал использовать класс-оболочку Boolean. Также пробовал использовать сеттер, такой как isPreferred и isIsPreferred / setPreferred и setIsPreferred.
import javax.persistence.*;
import javax.xml.bind.annotation.XmlElement;
@Entity
public class Address {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String street;
private String houseNr;
private String zip;
private String city;
private String country;
@XmlElement(name = "isPreferred")
private boolean preferred;
...getters/setters...
public boolean isPreferred() {
return preferred;
}
public void setPreferred(boolean isPreferred) {
this.preferred = isPreferred;
}
}
Я ожидаю, что в моем ответе будет только одно логическое поле. Только поле «isPreferred»,
но на самом деле я получаю предпочтительный и isPreferred:
"addresses": [
{
"zip": "12345",
"country": "DEU",
"city": "Köln",
"street": "Hauptstr.",
"isPreferred": true,
"houseNr": "1",
"type": "homeAddress",
"preferred": true
}
],
Комментарии:
1. Присутствует ли дублирующее поле в вашей базе данных? Это больше похоже на проблему сериализации JSON, чем на проблему сохранения. Тогда возникает вопрос: какова ваша библиотека сериализации JSON? Какую реализацию JAX-RS вы используете?
2. Попробуйте добавить
@XmlAccessorType(XmlAccessType.FIELD)
аннотацию перед вашим классом. Похоже@XmlAccessorType(XmlAccessType.PROPERTY)
, в вашем случае по умолчанию используется значение по умолчанию, когда оно не указано. Также я совершенно уверен, что спящий режим здесь не является частью проблемы.3.
@XmlElement(name = "isPreferred") @Column(name = "preferred") private boolean isPreferred;
/в качестве обходного пути могут использоваться / setter и getters isPreferred //4. Привет, очень, очень редко (примерно <0,001%) вопросы связаны с jpa (или конкретной реализацией hibernate), JSF И jax-rs. Комбинация двух из них уже составляет менее 1%, поэтому, пожалуйста, попробуйте сузить проблему. И, скорее всего (поскольку вы «генерируете» XML / JSON, рамки для этого более актуальны. Пожалуйста, учитывайте все подобные вещи при добавлении тегов к вопросу.
Ответ №1:
На мой взгляд, у вас в основном есть два варианта:
- Аннотируйте класс с помощью
@XmlAccessorType(XmlAccessType.FIELD)
- Поместите аннотацию
@XmlElement(name = "isPreferred")
в установщик поля
В настоящее время вы создаете второе поле с помощью средства получения.
Ответ №2:
Если я выполняю отладку в своем методе ответа, я вижу только одно поле, как и ожидалось, но в ответе postman у меня есть 2 логических поля: представление debugger с Response.ok(getAddresses()).build()
Комментарии:
1. Привет, вы можете (= должны) добавить это в качестве комментария к вопросу. Не в качестве ответа… Приветствия!