我有 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