简体   繁体   中英

JPA/Hibernate: bidirectional OneToMany/ManyToOne relation only works unidirectional

I'm currently experiencing problems with my OneToMany/ManyToOne-Mapping. The mapping looks like this:

public class A implements Serializable {
    @EmbeddedId
    private AId id;

    // Other stuff...
}

@Embeddable
public class AId implements Serializable {
    @ManyToOne
    @JoinColumn(name = "B_ID", nullable = false)
    private B b;

    // Other stuff...
}

public class B implements Serializable {
    @OneToMany(mappedBy = "id.b")
    private List<A> as;

    // Other stuff...
}

If I try to access object B by using object A everything works just fine, but the inverse direction doesn't work at all. The relationship is always null.

A objectA = findAById(id);
B objectB = objectA.getB(); // OK

// But... for example
objectB.getAs(); // returns null

I wrote a small query to get all the As for an object B using its primary key:

SELECT as FROM B b, IN(b.as) as WHERE b.id = :id

This works perfectly, I get the expected result. I checked what is persisted in the DB, too, and it's all right. Has anybody a clue why that relationship only works in one direction?

Regards,

Alex

that's because by default @onetomany has lazy fetch. You can fix that using this fetch = FetchType.EAGER

public class B implements Serializable {
    @OneToMany(mappedBy = "id.b", fetch = FetchType.EAGER)
    private List<A> as;

    // Other stuff...
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM