Many-To-One com a tabela de junção em classes de recurso de hibernação para um JAX-RS usando Jersey

Eu estou implementando um serviço Web RESTful usando Jersey. Eu uso o hibernate para se comunicar com o banco de dados (mySQL). Minhas classes de recursos de hibernação incluem:

@Entity
public class Activity {

    @Id
    @GeneratedValue
    private long id;

@ManyToOne
    @JoinTable(name="category_activity",
    joinColumns={@JoinColumn(name="activities_id")},
    inverseJoinColumns={@JoinColumn(name="Category_id")})
    private Category category;
}

e a classe Category:

@Entity
public class Category {

    @Id
    @GeneratedValue
    private long id;

    @OneToMany
    @Fetch(FetchMode.JOIN)
    @JoinTable(name = "category_activity",
    joinColumns = { @JoinColumn(name = "Category_id") }, 
    inverseJoinColumns = { @JoinColumn(name = "activities_id") })
    @JsonIgnore
    private Collection<Activity> activities;
}

Eu usei essa consulta para buscar as atividades:

session.createQuery("from Activity a join a.category cs where cs.id= :categoryId order by a.key").setLong("categoryId", categoryId).list();

O resultado no formato JSON não está certo como:

[[{"id":26,"key":"other","name":"Other","cost":100.0,"category":{"id":10,"name":"General","description":""}},{"id":10,"name":"General","description":""}]]

Como você vê, a categoria é impressa 2 vezes e temos um extra [] ao redor dela. Quando eu uso outro mecanismo de relação um-para-muitos na classe de categoria como:

@OneToMany(targetEntity = Activity.class, mappedBy = "category", fetch = FetchType.LAZY, cascade = CascadeType.ALL)
@JsonIgnore
private Collection<Project> activities;

E na classe de atividade:

@ManyToOne(optional = false)
    private Category category;

E esta consulta:

session.createQuery("from Activity as a where a.category.id= :categoryId order by a.key").setLong("categoryId", categoryId).list();

Tudo funciona bem. Mas eu tenho que usar a tabela de junção porque eu não suponho para mudar o banco de dados.

O resultado adequado deve ser semelhante:

[{"id":26,"key":"other","name":"Other","cost":100.0,"category":{"id":10,"name":"General","description":""}}]

Agradeço por qualquer ajuda.

questionAnswers(1)

yourAnswerToTheQuestion