首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Hibernate连接不能将异常转换为多到多

Hibernate连接不能将异常转换为多到多
EN

Stack Overflow用户
提问于 2014-07-19 11:45:44
回答 1查看 1K关注 0票数 2

我有个关于冬眠的问题。我必须与许多人的关系,并试图作出选择的班级。问题是我得到了一个例外。你能帮上忙吗?

代码语言:javascript
复制
@Entity(name = "pracownik")
@Inheritance(strategy = InheritanceType.JOINED)
@Proxy(lazy = false)
public class Pracownik extends Osoba {

@ManyToMany(fetch = FetchType.EAGER, cascade = { CascadeType.ALL })
@JoinTable(name = "grafikpracownika", joinColumns = { @JoinColumn(name = "idosoby") }, 
inverseJoinColumns = { @JoinColumn(name = "idgrafiku") })
private List<Grafik> grafiki = new ArrayList<>();
}

第二个实体

代码语言:javascript
复制
@Entity (name = "grafik")
@Proxy(lazy = false)
public class Grafik {

@ManyToMany (mappedBy = "grafiki",cascade = { CascadeType.ALL })
private List <Pracownik> pracownik  = new ArrayList<>();


}

我开发的方法是:

代码语言:javascript
复制
    public List<Pracownik> getWszyscyPracownicyGrafiku() {
    List<Pracownik> pracownicy = new ArrayList<>();
    Session session = HibernateUtil.getSessionFactory().getCurrentSession();
    Transaction transaction = session.beginTransaction();
    Query query = session.createQuery("from pracownik as p join p.grafiki");
    pracownicy = query.list();
    transaction.commit();
    return pracownicy;
}

例外是:

代码语言:javascript
复制
Exception in thread "main" java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to model.Pracownik

知道是怎么回事吗?

我也想添加一个"where“,但是在我去掉这个异常之后应该很容易。我也尝试使用“普通”sql。

代码语言:javascript
复制
SELECT * from pracownik p join grafikpracownika g on p.idosoby = g.idosoby where idgrafiku = 6

但我得到的是:

代码语言:javascript
复制
org.hibernate.loader.custom.NonUniqueDiscoveredSqlAliasException: Encountered a duplicated sql alias [idosoby] during auto-discovery of a native-sql query
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-07-19 12:04:28

您将从两个没有显式select子句的表中进行选择,因此Hibernate将生成一个元组(Pracownik, Grafik)列表。

如果只需要Pracownik(即在where中在p.grafiki上创建条件需要连接),请使用

代码语言:javascript
复制
select distinct p from pracownik as p join p.grafiki

如果连接用于指示Hibernate获取相关的Grafik,则使用join fetch

代码语言:javascript
复制
from pracownik as p join fetch p.grafiki
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24840049

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档