繁体   English   中英

JPA,休眠。 java.lang.IllegalStateException:节点没有数据类型

[英]JPA, Hibernate. java.lang.IllegalStateException: No data type for node

我有这个课:

@Entity
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name = "tipo", discriminatorType = DiscriminatorType.STRING)
@DiscriminatorValue(value = "")
@Table(name = "publicacao")
@NamedQuery(name = "findPubOrderByAutor", query = "SELECT publicacao FROM Publicacao pub JOIN pub.autores a WHERE a.id = :id ORDER BY pub.autores")})
public abstract class Publicacao {
    @Column(name = "autores", nullable = false)
    @ManyToMany(fetch = FetchType.EAGER)
    @OrderBy("nome")
    @JoinTable(name = "pub_autor",
    joinColumns = @JoinColumn(name = "autor_id"),
    inverseJoinColumns = @JoinColumn(name = "publicacao_id"))
    private List<Autor> autores;
}

我得到这个错误:

java.lang.IllegalStateException: No data type for node: org.hibernate.hql.ast.tree.IdentNode 

-[IDENT] IdentNode:“ Publicacao” {originalText = Publicacao}

对于类中的NamedQuery

"SELECT publicacao FROM Publicacao pub JOIN pub.autores a WHERE a.id = :id ORDER BY pub.autores"

如果我将Publicacao替换为Publicacao,则会收到相同的错误,但会出现...''publicacao''...的错误。

Java 7 Hibernate 3.5.5 JPA 2.0(我认为)

如果我错过了一些重要信息,请告诉我。

我不知道该怎么办,因为它为表和对象名都指向了相同的错误。

提前致谢。

ORDER BY pub.autores

这可能是例外的原因。 按集合排序没有任何意义。

另一个问题是

SELECT publicacao

publicacao不是在查询中定义的别名。 您应该改用select pub

另外,您不应该在autores上使用@Column批注。 它是ManyToMany关联,因此未映射为列。 您还可以使用inverseJoinColumns ,而应该使用joinColumns ,反之亦然。

我认为问题仅是由于使用未定义的别名。 与其编写SELECT publicacao编写SELECT pub

更改代码后看起来像这样,

@Entity
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name = "tipo", discriminatorType =    DiscriminatorType.STRING)
@DiscriminatorValue(value = "")
@Table(name = "publicacao")
@NamedQuery(name = "findPubOrderByAutor", query = "SELECT pub FROM Publicacao pub JOIN pub.autores a WHERE a.id = :id ORDER BY pub.autores")})
public abstract class Publicacao {
    @Column(name = "autores", nullable = false)
    @ManyToMany(fetch = FetchType.EAGER)
    @OrderBy("nome")
    @JoinTable(name = "pub_autor", joinColumns = @JoinColumn(name = "autor_id"), inverseJoinColumns = @JoinColumn(name = "publicacao_id"))
    private List<Autor> autores;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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