Круговые зависимости Джексона

У меня есть круговая зависимость, которую я сейчас пытаюсь решить. Возьмите эти два класса - код котельной плиты удален для демонстрационных целей.

1 класс

@Entity
@Table(name = "T_CREDENTIAL")
@Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
@JsonIdentityInfo(generator=ObjectIdGenerators.IntSequenceGenerator.class, property="@id")
public class Credential implements Serializable {

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


    //Removed @JsonIgnore as want to disable certain fields if no credentials are available    
    //Also fetch this in an eager fashion instead of lazily loading it
    @OneToMany(mappedBy = "credential",fetch=FetchType.EAGER)
    private Set<UserTask> userTasks = new HashSet<>();

    ....

    .....

Класс 2

@Entity
@Table(name = "T_USERTASK")
@Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
@JsonIdentityInfo(generator=ObjectIdGenerators.IntSequenceGenerator.class, property="@id")
public class UserTask implements Serializable {

    /**
     * 
     */
    private static final long serialVersionUID = -8179545669754377924L;


    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name = "id")
    private Long id;


    @ManyToOne(fetch=FetchType.EAGER)
    @NotNull(message = "Credential must not be null")
    private Credential credential;

К сожалению, у меня есть случаи использования UserTask для загрузки учетных данных и случаи, когда Credential нужно загружать Usertasks

Аннотация @JsonIdentityInfo, кажется, выполняет свою работу. Если я загружаю все пользовательские задачи, он загружает первую пользовательскую задачу и ее учетные данные, но затем этот объект учетных данных также загружает любые пользовательские задачи, назначенные этим учетным данным. Затем он встречает новый @Id или userTask, который теперь загружает его с учетными данными, а не как задачи 2 пользователей.

Любые идеи, что я могу сделать, чтобы обойти эту проблему?

Ура Дэмиен

- Обновление вопроса Я обновил свой код сейчас, чтобы использовать новые аннотации, упомянутые другими пользователями.

1 класс

    @Entity
@Table(name = "T_CREDENTIAL")
@Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
public class Credential implements Serializable {

    /**
     * 
     */
    private static final long serialVersionUID = -8696943454186195541L;



    //Removed @JsonIgnore as want to disable certain fields if no credentials are available    
    //Also fetch this in an eager fashion instead of lazily loading it
    @OneToMany(mappedBy = "credential",fetch=FetchType.EAGER)
    @JsonManagedReference("credential")
    private Set<UserTask> userTasks = new HashSet<>();
    ....
....

Класс 2

@Entity
@Table(name = "T_USERTASK")
@Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
public class UserTask implements Serializable {


    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name = "id")
    private Long id;

    @ManyToOne(fetch=FetchType.EAGER)
    @NotNull(message = "Credential must not be null")
    @JsonBackReference("credential")
    private Credential credential;
....
....

Эти классы теперь работают и не имеют циклических зависимостей. Однако, когда я делаю запрос сейчас, чтобы получить свои пользовательские задачи или отдельную задачу, объект учетных данных не возвращается, даже если у меня не задана аннотация @jsonIgnore. Есть идеи, что вызывает это?

Ответы на вопрос(2)

Ваш ответ на вопрос