Невозможно использовать @NamedEntityGraph с @ElementCollecion

#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")
)