Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Java Новый топик    Ответить
 jparepository как получить вложенный json  [new]
Музаффар
Member

Откуда: UZB
Сообщений: 1083
всем доброго!
ребят подскажите как должен правильно это реализовать, вопрос конечно совсем уж нубский...

собственно есть скажем два энтити
@Entity
@Table(name = "jobs")
public class Jobs implements Serializable {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;

private String title;

@JsonManagedReference
@JsonIgnoreProperties({"hibernateLazyInitializer", "handler"})
@OneToMany(fetch = FetchType.LAZY, mappedBy = "job", cascade = CascadeType.ALL)
private Set<Tags> tags = new HashSet<>(0);

//...


@Entity
@Table(name = "tags")
public class Tags implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;

private String name;

@JsonBackReference
@JsonIgnoreProperties({"hibernateLazyInitializer", "handler"})
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "id_job")
private Jobs job;


//...


как бы работает правильно если запрошу jobService.getAllJobs() получаю то что надо

[
{
    "id": 1,
    "title": "Title1",
    "tags": [
        {
            "id": 3,
            "name": "Grahphic design"
        },
        {
            "id": 4,
            "name": "Sketch"
        }
     ],
}, ....]


а вот если tagsService.getAllTags() то полуачю только тэги т.е.
[
        {
            "id": 3,
            "name": "Grahphic design"
        },
        {
            "id": 4,
            "name": "Sketch"
        },
        {
            "id": 1,
            "name": "Photoshop"
        },
        {
            "id": 2,
            "name": "Web design"
        }
    ]


на это влияет аннотации @JsonManagedReference и @JsonManagedReference, но если их поменять получится обратное... так вот как отказаться от этих аннотации и можно было получить и при запросе данные из связанных таблиц?

З.Ы. но без этих аннотаций у меня вроде 1+N получается...
25 дек 18, 04:55    [21772631]     Ответить | Цитировать Сообщить модератору
 Re: jparepository как получить вложенный json  [new]
Озверин
Member

Откуда: Ростов-на-Дону
Сообщений: 5183
Музаффар, а что вы хотите получить в ответе на tagsService.getAllTags() ?
25 дек 18, 09:38    [21772673]     Ответить | Цитировать Сообщить модератору
 Re: jparepository как получить вложенный json  [new]
Музаффар
Member

Откуда: UZB
Сообщений: 1083
Озверин,
к примеру из тегов не могу достать джобы ну используя такой метод
tagsService.findAllTags().get(0).getJob()


получаю эксепшн такого рода
Type definition error: [simple type, class org.hibernate.proxy.pojo.bytebuddy.ByteBuddyInterceptor]; nested exception is com.fasterxml.jackson.databind.exc.InvalidDefinitionException: No serializer found for class org.hibernate.proxy.pojo.bytebuddy.ByteBuddyInterceptor and no properties discovered to create BeanSerializer (to avoid exception, disable SerializationFeature.FAIL_ON_EMPTY_BEANS) (through reference chain: test.sudo.sudoyers.entity.Jobs$HibernateProxy$SDqzJVBr[\"hibernateLazyInitializer\"])"

это связан именно с выше указанными тегами...
26 дек 18, 22:30    [21774329]     Ответить | Цитировать Сообщить модератору
 Re: jparepository как получить вложенный json  [new]
Озверин
Member

Откуда: Ростов-на-Дону
Сообщений: 5183
Музаффар
Озверин,
к примеру из тегов не могу достать джобы ну используя такой метод
tagsService.findAllTags().get(0).getJob()


получаю эксепшн такого рода
Type definition error: [simple type, class org.hibernate.proxy.pojo.bytebuddy.ByteBuddyInterceptor]; nested exception is com.fasterxml.jackson.databind.exc.InvalidDefinitionException: No serializer found for class org.hibernate.proxy.pojo.bytebuddy.ByteBuddyInterceptor and no properties discovered to create BeanSerializer (to avoid exception, disable SerializationFeature.FAIL_ON_EMPTY_BEANS) (through reference chain: test.sudo.sudoyers.entity.Jobs$HibernateProxy$SDqzJVBr[\"hibernateLazyInitializer\"])"

это связан именно с выше указанными тегами...


вы можете вытащить код джобы, либо написать свой десериализатор для этих целей.
Если вас устроит код джобы, то используйте:

@JsonIdentityInfo(
  generator = ObjectIdGenerators.PropertyGenerator.class, 
  property = "id")
26 дек 18, 22:46    [21774344]     Ответить | Цитировать Сообщить модератору
Все форумы / Java Ответить