У меня есть две сущности, TableA и TableB, с отображением «многие ко многим» между ними.Когда я пытаюсь выбрать все table_b с помощью createNativeQuery, я могу получить все данные table_b, но не могу ссылаться ни на какие данные table_a.
table_a entity
@Entity
@Table(name = "table_a")
public class TableA implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private Integer id;
@Column(name = "data1")
private String data1;
@Column(name = "data2")
private String data2;
@ManyToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
@JoinTable(
name = "a_b_mapping",
joinColumns = @JoinColumn(name = "a_id"),
inverseJoinColumns = @JoinColumn(name = "b_id"))
private List<TableB> bItems;
// getters/setters
public List<TableB> getBItems() {
if (bItems == null) { bItems = new ArrayList<>(); }
return bItems;
}
public void setBItems(List<TableB> bItems) {
this.bItems = bItems;
}
}
table_bсущность
@Entity
@Table(name = "table_b")
public class TableB implements Serializable {
@Id
@Column(name = "id")
private Integer id;
@ManyToMany(mappedBy = "bItems")
private List<TableA> aItems;
// Getters/Setters
public List<TableA> getAItems() {
if (aItems == null) { aItems = new ArrayList<>(); }
return aItems;
}
public void setAItems(List<TableA> aItems) {
this.aItems = aItems;
}
}
ПРИМЕЧАНИЕ. Я устанавливаю идентификатор вручную для TableB перед вставкой
Процессор:
@Component
public class ProcessorDAO {
@PersistenceUnit
private EntityManagerFactory entityManagerFactory;
@Transactional
public void process() {
EntityManager em = entityManagerFactory.createEntityManager();
EntityTransaction entityTransaction = em.getTransaction();
try {
entityTransaction.begin();
Query q = em.createNativeQuery("SELECT * FROM table_b", TableB.class);
List<TableB> tableBItems = q.getResultList();
for (TableB item : tableBItems) {
// Always 0 here?
item.getAItems().size();
}
entityTransaction.commit();
} catch (RuntimeException e) {
if (entityTransaction.isActive()) {
entityTransaction.rollback();
}
throw e;
} finally {
em.close();
}
}
}
Я могу получить AItems, если используюfindAll из репозитория TableB, но я пытался заставить это работать только с менеджером сущностей, не зная, в чем разница.