Jpa 不太了解延迟加载

Jpa 不太了解延迟加载,jpa,Jpa,我有一种情况,当我希望以一对多的方式加载时,不会发生延迟加载。 显然,我对这一点还不熟悉。为什么当我调用s.getSongComposer()时,作曲者不会被抓取 这是我的道课: public class SongDAOImpl implements SongDAO { @PersistenceContext private EntityManager em; @Override @SuppressWarnings(value = { "unchecked"

我有一种情况,当我希望以一对多的方式加载时,不会发生延迟加载。 显然,我对这一点还不熟悉。为什么当我调用s.getSongComposer()时,作曲者不会被抓取

这是我的道课:

public class SongDAOImpl implements SongDAO {

    @PersistenceContext
    private EntityManager em;

    @Override
    @SuppressWarnings(value = { "unchecked" })
    public List<Song> getAllSongsOnAlbum(int albumID) {
        Query q = em.createQuery("SELECT s FROM Song s WHERE s.album.albumID  = :albumid ORDER BY s.songName");
        q.setParameter("albumid", albumID);
        List<Song> list = (List<Song>) q.getResultList();
        for (Song s: list) {
            s.getSongComposers();
        }
        return list;
    }

}

你必须明确地这样做。请尝试以下查询:

SELECT DISTINCT s FROM Song s JOIN FETCH s.songComposers WHERE s.album.albumID  = :albumid ORDER BY s.songName"

非常感谢!我也不得不在那里打一记耳光。这似乎与Hibernate不同,在Hibernate中,getter调用将自动引入子记录。
@Entity
@Table(name="song_composer")
public class SongComposer {


    @Id
    @GeneratedValue
    @Column(name="SongComposerID")
    private int songComposerID;


    @ManyToOne
    @JoinColumn(name="SongID", referencedColumnName="SongID")
    private Song song;


    @ManyToOne
    @JoinColumn(name="ComposerID", referencedColumnName="ComposerID")
    private Composer composer;


         ..... getters/setters .......

}
SELECT DISTINCT s FROM Song s JOIN FETCH s.songComposers WHERE s.album.albumID  = :albumid ORDER BY s.songName"