#java #hibernate #entitygraph
#java #спящий режим #entitygraph
Вопрос:
Я пытаюсь установить на нем простую сущность с NamedEntityGraph. К сожалению, это не сработает. Не могли бы вы иметь какие-либо идеи, как это исправить?
Объект ServiceType имеет @ElementCollection
of, Set
из String
которых просто идентификаторы PictureModel
, связанные с объектом. При запуске я получил:
Caused by: javax.persistence.PersistenceException: [PersistenceUnit: default] Unable to build Hibernate SessionFactory; nested exception is java.lang.IllegalArgumentException: Unable to locate Attribute with the the given name [backgroundPicIds] on this ManagedType [pl.mihome.djcost.model.ServiceType]
@Entity
@Table(name = "service_type")
@Getter
@Setter
@NoArgsConstructor
@NamedEntityGraph(
name = "serviceType.with.backgroundPicIds",
attributeNodes = @NamedAttributeNode("backgroundPicIds")
)
public class ServiceType {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Setter(AccessLevel.NONE)
@Column(nullable = false, updatable = false)
private int id;
@Length(max = 100)
@NotBlank
private String name;
private boolean active;
@OneToMany(mappedBy = "serviceType")
private Set<Account> accounts;
@ManyToMany(mappedBy = "servicesApplicable")
private Set<AccountType> accountTypes;
@OneToMany(fetch = FetchType.LAZY, mappedBy = "serviceType", orphanRemoval = true, cascade = CascadeType.ALL)
private Set<PictureModel> backgroundPicture;
@ElementCollection
@CollectionTable(name = "image", joinColumns = {@JoinColumn(name = "service_type_id")})
@Column(name = "id")
private Set<String> backgroundPictureId;
@PrePersist
void activate() {
this.active = true;
}
}
@Entity
@Table(name = "image")
@NoArgsConstructor
@Getter
@Setter
@Builder
@AllArgsConstructor
public class PictureModel {
@Id
@GeneratedValue(generator = "UUID")
@GenericGenerator(name = "UUID", strategy = "org.hibernate.id.UUIDGenerator")
@Column(nullable = false, updatable = false)
@Setter(AccessLevel.NONE)
private String id;
private String type;
private String name;
@Lob
private byte[] body;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "account_id")
private Account account;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "public_platform_id")
private PublicPlatform publicPlatform;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "service_type_id")
private ServiceType serviceType;
}
Ответ №1:
У вас просто нет атрибута с именем backgroundPicIds
в сущности ServiceType
.
Попробуйте исправить свой график таким образом:
@NamedEntityGraph(
name = "serviceType.with.backgroundPicIds",
attributeNodes = @NamedAttributeNode("backgroundPictureId")
)