Ho due entità, società e lavoro, con una relazione bidirezionale OneToMany. Il mio problema è che non posso caricare pigro l'azienda List<Job> jobs
.Spring Data Rest JPA - Impossibile caricare pigro OneToMany relazione bidirezionale
Per esempio quando faccio:
GET /api/companies/1
questa è la risposta JSON:
{
"id": 1,
"name": "foo",
...
"_embedded": {
"jobs": [
{...},
...
{...}
],
"employees": [
{...},
{...}
]
},
"_links": {
"self": {
"href": "http://localhost:8080/api/companies/1"
},
"jobs": {
"href": "http://localhost:8080/api/companies/1/jobs"
},
"employees": {
"href": "http://localhost:8080/api/companies/1/employees"
}
}
}
io non voglio avere il _embedded
dato che non ho impostato il fetchType = EAGER. Qui sono i miei modelli:
Company.java
@Entity
public class Company {
@Column(nullable = false, unique = true)
private String name;
@OneToMany(mappedBy = "company", fetch = FetchType.LAZY)
private List<Job> jobs;
...
public Company() {
}
...
}
Job.java
@Entity
public class Job {
@Column(nullable = false)
public String title;
@Column(length = 10000)
public String description;
@ManyToOne(fetch=FetchType.LAZY)
private Company company;
...
public Job() {
}
...
}
Come si può vedere la stessa cosa accade per le altre relazioni OneToMany (dipendenti). Posso evitare di restituire l'intero elenco di offerte di lavoro o dipendenti ogni volta?
MODIFICA: dal lato Lavoro il carico pigro funziona bene! Non ricevo la risposta della società che è correlata a un lavoro. Devo fare esplicitamente /api/jobs/123/company
per ottenere la compagnia.
MODIFICA 2: le proiezioni funzionano solo per le raccolte. In questo caso non è ciò di cui ho bisogno. Gli estratti potrebbero funzionare, ma voglio evitarli. Non voglio fare l'esplicitazione /api/companies/1?projection=MyProjection
dato che non ne uso più di uno. Voglio cambiare il comportamento predefinito, proprio come fanno le proiezioni nelle raccolte.
Edit3: ho provato questo
@RestResource(exported = false)
@OneToMany(mappedBy = "company")
private List<Job> jobs;
e ottengo l'errore Detected multiple association links with same relation type! Disambiguate association
.
è davvero fastidioso. Ho solo bisogno di liberarmi di _embedded
. Nulla?
Questa non è una vera domanda su JPA, è una domanda sul fatto che le raccolte all'interno di "Azienda" debbano essere serializzate. Sarebbe lo stesso problema se la relazione fosse solo POJO non mappata su oggetti persistenti. – wrschneider
In questo caso un '@RestResource (exported = false)' o '@ JsonIgnore' nel campo' jobs' dovrebbe essere sufficiente (si veda [qui] (http://docs.spring.io/spring-data/rest/docs /current/reference/html/#customizing-sdr.hiding-repositories)). –
@DavidRiccitelli ma ho bisogno che vengano esportati. Ho solo bisogno di caricarli pigro, quindi avrò i lavori di una società solo quando faccio '/ api/companies/1/jobs'. –