0

我有 2 节课

收藏品

@Entity
@NamedEntityGraph(
        name = "cars-graph",
        attributeNodes = @NamedAttributeNode("cars"))
public class Collections {
    @Id
    @ReturnInsert(returnOnly=true)
    private Long id;

    @ManyToMany(cascade = ALL)
    @JoinTable(name="CarsCollections",
            joinColumns= @JoinColumn(name="COLLECTIONS_ID", referencedColumnName="ID"),
            inverseJoinColumns=
                    {@JoinColumn(name = "MODELSRANGE_ID", referencedColumnName = "MODELSRANGE_ID"),
                            @JoinColumn(name = "MODELS_ID", referencedColumnName = "MODELS_ID"),
                            @JoinColumn(name = "TYPES_ID", referencedColumnName = "TYPES_ID")
                    }
    )
    public List<Cars> cars;

和汽车

@Entity(name = "Cars")
public class Cars {

    @EmbeddedId
    private CarsId id;


    @ManyToOne(fetch = FetchType.EAGER)
    @MapsId("modelsRangeid")
    @JoinColumn(name = "MODELSRANGE_ID")
    private ModelsRange modelsrange;

    @ManyToOne(fetch = FetchType.EAGER)
    @MapsId("modelsid")
    @JoinColumn(name = "MODELS_ID")
    private Models models;

    @ManyToOne(fetch = FetchType.EAGER)
    @MapsId("typesid")
    @JoinColumn(name = "TYPES_ID")
    private Types types;

    @ManyToOne(cascade = CascadeType.PERSIST, fetch = FetchType.EAGER)
    @JoinColumn(name = "MAKE")
    private Makes makes;

当我尝试使用汽车收藏时

EntityGraph entityGraph = em.getEntityGraph("cars-graph");
        Collections collections = em.createQuery("select r from Collections r where r.id = :id", Collections.class)
                .setParameter("id", 1L)
                .setHint("javax.persistence.fetchgraph", entityGraph)
                .getSingleResult();
        System.out.println(collections.getCars());

我明白了{IndirectList: not instantiated}。不给出错误,但 Cars 不加载。

如果您为 Cars 字段“EAGER”添加到 Collections 实体

...
@ManyToMany(cascade = ALL, fetch = FetchType.EAGER)
    @JoinTable(name="CarsCollections",
...

有用。但随后 Cars 将始终加载。

我使用 Jakarta EE9 和 Eclipselink

4

1 回答 1

0

javax 名称中的问题。在 Jakarta EE 需要使用:

...
.setHint("jakarta.persistence.loadgraph", entityGraph)
...
于 2022-01-14T00:11:59.543 回答