[英]Getting java.lang.IllegalStateException: No data type for node: org.hibernate.hql.ast.tree.MethodNode
[英]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.