Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
1.2k views
in Technique[技术] by (71.8m points)

Join fetch property of embeddable in hibernate

These are my mapped classes:

@Entity
public class Item {
...
     @ElementCollection
     @CollectionTable(name = "BID")
     private Set<Bid> bids = new HashSet<>();
...
}

@Embeddable
@Immutable
public class Bid implements Serializable {
...
    @ManyToOne(fetch = FetchType.LAZY)
    private User bidder;
...
}

@Entity
public class User {
...
}

Is there a way to query all bids and join fetch all bidders to avoid n+1 problem?

It will be smth like this

session.createQuery("SELECT b FROM Item i " +
                "JOIN i.bids b " +
                "JOIN FETCH b.bidder", Bid.class)

but this fails with: org.hibernate.QueryException: query specified join fetching, but the owner of the fetched association was not present in the select list[FromElement{explicit,not a collection join,fetch join,fetch non-lazy properties,classAlias=null,role=null.bidder...]

I know that making Bid class entity instead of embeddable will solve the problem, but i am interested is there any way how to do this with this mapping


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

I think this is a bug in older Hibernate versions. Try updating to the latest 5.4 version.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...