Ich möchte ein UserReference-Objekt aus der Datenbank laden, aber aus dem Verifier-Attribut möchte ich nur die ID, firstName und lastName, so dass die userReference etwas aussehen würde dies wie:So laden Sie nur angegebene Attribute im Untergraphen in einem @NamedEntityGraph
{
"id": 1,
"company": "company1",
"companyContactName": "some name",
"companyPosition": "programmer",
"referenceDate": "02/04/2005",
"verifier": {
"id":1
"firstName": "Jane",
"lastName": "Smith"
"email":null,
"username":null,
"office:null,
"department":null
}
}
habe ich für die UserReference Klasse ein Unternehmen graph, aber die, die ich verwendet, lädt alle Informationen, die der Benutzer, einschließlich der E-Mail, Benutzername, Büro und Abteilung. Gibt es eine Möglichkeit, etwas wie EntityGraphType.FETCH zum Untergraphen zu spezifizieren, so dass es nur die ID, firstName und lastName für den Verifier lädt?
Das ist mein UserReferenceRepository:
public interface UserReferenceRepository extends JpaRepository<UserReference, Long>{
@EntityGraph(value = "userReferenceGraph" , type = EntityGraphType.FETCH)
UserReference findOne(Long id);
}
Die UserReference Klasse:
@Getter
@Setter
@EqualsAndHashCode (exclude = {"id", "verifier"})
@ToString(exclude = {"id"})
@Entity
@NamedEntityGraphs({
@NamedEntityGraph(
name = "userReferenceGraph",
attributeNodes = {
@NamedAttributeNode(value = "verifier", subgraph = "verifierGraph")
},
subgraphs = {
@NamedSubgraph(
name = "verifierGraph",
type = User.class,
attributeNodes = {
@NamedAttributeNode(value = "id"),
@NamedAttributeNode(value = "firstName"),
@NamedAttributeNode(value = "lastName")})})
})
public class UserReference {
@Id
@GeneratedValue
private Long id;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "user_id", referencedColumnName = "user_id", foreignKey = @ForeignKey (name = "FK_UserReference_UserHRDetails_user_id"))
@JsonIgnore
private UserHRDetails hrDetails;
private String company;
private String companyContactName;
private String companyPosition;
private Date referenceDate;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "verifier_id")
private User verifier;
}
und Benutzer:
@Getter @Setter
@EqualsAndHashCode(exclude = {"id", "department", "company", "authorities", "hrDetails"})
@ToString(exclude = {"password"})
@Entity
@AllArgsConstructor
@Builder
public class User implements Serializable{
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Access(value = AccessType.PROPERTY)
private Long id;
@Size(max = 50)
@Column(name = "first_name", length = 50)
private String firstName;
@Size(max = 50)
@Column(name = "last_name", length = 50)
private String lastName;
@Column(length = 100, unique = true, nullable = false)
private String email;
@Column(length = 50, unique = true, nullable = false)
private String username;
@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "department_id")
private Department department;
@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "office_id")
private Office office;
}