Viele bis viele Beziehungen mit Spring Boot, Jackson und HibernateJava

Java-Forum
Anonymous
 Viele bis viele Beziehungen mit Spring Boot, Jackson und Hibernate

Post by Anonymous »

Ich arbeite an einem REST-Projekt mit Spring Boot und Hibernate und versuche derzeit herauszufinden, wie ich mit meiner JSON-Serialisierung umgehen kann. "Image Beschreibung hier eingeben" src = "https://i.sstatic.net/praek.png"/>

Das in der obige ERD gezeigte Schema wird von durch Hibernate und funktioniert gut. Mein Verständnis ist, dass der Frühling jetzt versucht, die Objektkette mit Jackson zu serialisieren. Da sowohl die Eltern als auch die Kinderobjekte einander als Attribut haben, treten wir auf eine unendliche Rekursionsschleife. @JsonManagedReference und @JsonBackReference, aber diese scheinen nur für Eins-zu-viele-Beziehungen zu funktionieren. < /P>

Was ich suche Erhalten Sie die Anfrage an/user/{id} , ich erhalte das Benutzerobjekt einschließlich aller Beziehungsattribute (nennen wir es das vollständige Objekt), aber die Beziehungsattribute selbst zeigen ihre Beziehungsattributen nicht (minimierte Objekte) . Dies funktioniert einwandfrei mit den oben genannten Anmerkungen, aber wie kann ich dies auch in der anderen Art und Weise funktionieren? > < /p>

Code: Select all

{   // full user object
id: 1,
username: 'foo',
// password can be JsonIgnored because of obvious reasons
role: { // minimized role object
id: 1,
name: 'bar'
// NO USERS LIST
}
area: { //minimized area object
id: 2,
name: 'some val'
// NO USERS LIST
// NO TABLES LIST
}
}
< /code>

Die gewünschte Antwort für /userrol /{id} < /code> < /p>

{ // full role object
id: 1,
name: 'waiter'
users: [
{   // minmized user object
id: 1,
username: 'foo'
// password can be JsonIgnored because of obvious reasons
// NO ROLE OBJECT
// NO AREA OBJECT
},
{   // minmized user object
id: 1,
username: 'foo'
// password can be JsonIgnored because of obvious reasons
// NO ROLE OBJECT
// NO AREA OBJECT
}
]
}
< /code>

Im Allgemeinen: Ich möchte ein vollständig
Ideen? Ich hoffe, meine Erklärung ist klar genug.  > Der Bereich, der Benutzer und die USERRole Pojo, wie in den Kommentarabschnitten angefordert.@Entity
@Table(name = "users", schema = "public", catalog = "PocketOrder")

public class User {
private int id;
private String username;
private String psswrd;
private List areas;

private UserRole Role;

@Id
@Column(name = "id", nullable = false)
public int getId() {
return id;
}

public void setId(int id) {
this.id = id;
}

@Basic
@Column(name = "username", nullable = false, length = 20)
public String getUsername() {
return username;
}

public void setUsername(String username) {
this.username = username;
}

@Basic
@JsonIgnore
@Column(name = "psswrd", nullable = true, length = 40)
public String getPsswrd() {
return psswrd;
}

public void setPsswrd(String psswrd) {
this.psswrd = psswrd;
}

@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;

User user = (User) o;

if (id != user.id) return false;
if (username != null ? !username.equals(user.username) : user.username != null) return false;
if (psswrd != null ? !psswrd.equals(user.psswrd) : user.psswrd != null) return false;

return true;
}

@Override
public int hashCode() {
int result = id;
result = 31 * result + (username != null ? username.hashCode() : 0);
result = 31 * result + (psswrd != null ? psswrd.hashCode() : 0);
return result;
}

@ManyToMany(mappedBy = "users")
public List getAreas() {
return areas;
}

public void setAreas(List areas) {
this.areas = areas;
}

@ManyToOne
@JoinColumn(name = "role_fk", referencedColumnName = "id", nullable = false)
public UserRole getRole() {
return Role;
}

public void setRole(UserRole role) {
Role = role;
}
}
< /code>

 UserRole < /h3>

@Entity
@javax.persistence.Table(name = "userroles", schema = "public", catalog = "PocketOrder")
public class UserRole {
private int id;
private String name;
private List users;

@Id
@Column(name = "id", nullable = false)
public int getId() {
return id;
}

public void setId(int id) {
this.id = id;
}

@Basic
@Column(name = "name", nullable = false, length = 20)
public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;

UserRole userRole = (UserRole) o;

if (id != userRole.id) return false;
if (name != null ? !name.equals(userRole.name) : userRole.name != null) return false;

return true;
}

@Override
public int hashCode() {
int result = id;
result = 31 * result + (name != null ? name.hashCode() : 0);
return result;
}

@OneToMany(mappedBy = "role")
public List getUsers() {
return users;
}

public void setUsers(List users) {
users = users;
}
}
< /code>

 Bereich < /h3>

@Entity
@javax.persistence.Table(name = "areas", schema = "public", catalog = "PocketOrder")
public class Area {
private int id;
private String name;
private List users;

private List  tables;

@Id
@Column(name = "id", nullable = false)
public int getId() {
return id;
}

public void setId(int id) {
this.id = id;
}

@Basic
@Column(name = "name", nullable = false, length = 20)
public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;

Area area = (Area) o;

if (id != area.id) return false;
if (name != null ? !name.equals(area.name) : area.name != null) return false;

return true;
}

@Override
public int hashCode() {
int result = id;
result = 31 * result + (name != null ? name.hashCode() : 0);
return result;
}

@ManyToMany
@JoinTable(name = "areas_users", catalog = "PocketOrder", schema = "public", joinColumns = @JoinColumn(name = "area_fk", referencedColumnName = "id", nullable = false), inverseJoinColumns = @JoinColumn(name = "user_fk", referencedColumnName = "id", nullable = false))
public List getUsers() {
return users;
}

public void setUsers(List users) {
this.users = users;
}

@OneToMany(mappedBy = "area")
public List getTables() {
return tables;
}

public void setTables(List tables) {
this.tables = tables;
}
}

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post