Dependencias circulares de Jackson

Tengo una dependencia circular que estoy luchando por resolver en este momento Tome estas dos clases: el código de la placa de caldera se eliminó con fines de demostración

Clase 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<>();

    ....

    .....

Clase 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;

Desafortunadamente, tengo casos de uso donde UserTask necesita cargar las credenciales y casos donde Credential necesita cargar las Usertasks

La anotación @JsonIdentityInfo parece estar haciendo su trabajo. Si cargo todas las UserTasks, carga la primera userTask y su credencial, pero ese objeto de credencial también cargará las UserTasks asignadas a esa credencial. Esto luego encuentra el nuevo @Id o una UserTask que ahora lo carga con la credencial en lugar de las tareas de 2 usuarios

¿Alguna idea de lo que puedo hacer para sortear este problema?

Cheers Damien

- Actualización de preguntas He actualizado mi código ahora para usar las nuevas anotaciones mencionadas por otros usuarios

Clase 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<>();
    ....
....

Clase 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;
....
....

Estas clases ahora ahora funcionan y no tienen dependencias circulares. Sin embargo, cuando hago una consulta ahora para obtener mis tareas de uso o una sola tarea, el objeto de credencial no se devuelve aunque no tenga especificada la anotación @jsonIgnore. ¿Alguna idea de lo que está causando esto?

Respuestas a la pregunta(2)

Su respuesta a la pregunta