Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailemVyřešeno JPA načítání seznamů přes pohled, vysvětlení.

Ahoj, chtěl jsem se zeptat ohledně načítání dat v JPA.

Mám 2 třídy:

Uživatel:

 @Entity
    @Table(name = DomainConstant.TABLE_USER)
    public class User implements Serializable {

        @Id
        @Column(name = DomainConstant.DOMAIN_USER_ID)
        @GeneratedValue
        private Long userId;

        @ManyToMany(cascade = {CascadeType.ALL})
        @JoinTable(name = DomainConstant.VIEW_USER_BATTLE_LOGS, joinColumns = {
            @JoinColumn(name = DomainConstant.DOMAIN_USER_ID)}, inverseJoinColumns = {
            @JoinColumn(name = DomainConstant.DOMAIN_BATTLE_REPORT_ID)})
        private Set<BattleReportILogItem> setOfBattleLogs = new HashSet<>();

....(other stuff, get and set methods...)

Válečný report:

@Entity
@Table(name = DomainConstant.TABLE_BATTLE_REPORT)
public class BattleReportILogItem implements Serializable {

    @Id
    @GeneratedValue
    @Column(name = DomainConstant.DOMAIN_BATTLE_REPORT_ID)
    private Long BattleReportILogItemId;

    @ManyToMany(mappedBy = "setOfBattleLogs")
    private Set<User> setOfBattleLogs = new HashSet<>();

    ....(other stuff, get and set methods...)

Jde o to, že uživatel má množinu válečných reportů. Ty si načítám přes dao.

Má otázka zní, když načtu uživatele, načte si do paměti své reporty? Tedy -

 private Set<BattleReportILogItem> setOfBattleLogs = new HashSet<>();

Ale to já nechci... Jak to obejít? Nebo jak na to?

Předmět Autor Datum
Pak je neměl součástí objektu tabulky, načítej je až v případě potřeby.
Jan Fiala 27.02.2016 11:26
Jan Fiala
To mě také napadlo. Na stackoverflow jsem se dočetl že když nebudu ten seznam využívat dále v kódu… nový
MašinkaTomáš 27.02.2016 12:47
MašinkaTomáš
Kdyz tam das FetchType.LAZY, tak se ta kolekce naplni az kdyz s ni zacnes pracovat, kdyz FetchType.E… nový
MaSo 27.02.2016 15:03
MaSo
Díky, tím se to vysvětluje. poslední
MašinkaTomáš 27.02.2016 15:06
MašinkaTomáš

To mě také napadlo.

Na stackoverflow jsem se dočetl že když nebudu ten seznam využívat dále v kódu (po načtení z DB), tak se nenačte. Nevěřil jsem tomu, ale když jsem si nechal vypsat SQL, opravdu ho nenačítal.

Takže, to je řešení. Doufám že se později nesetkám s nějakým bugem, kdyžtak to z objektu odstraním.

Zpět do poradny Odpovědět na původní otázku Nahoru