我有这堂课:
@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:&#39;&#39; Publicacao&#39;&#39; {originalText = Publicacao}
对于类
中的NamedQuery"SELECT publicacao FROM Publicacao pub JOIN pub.autores a WHERE a.id = :id ORDER BY pub.autores"
如果我将Publicacao替换为Publicacao,我会得到同样的错误,但是对于......&#39;&#39; publicacao&#39;&#39; ...
Java 7 Hibernate 3.5.5 JPA 2.0(我认为)
如果我错过了一些重要信息,请告诉我。
我不知道该怎么做,因为它为表格和对象名称指出了同样的错误。
提前致谢。
答案 0 :(得分:0)
ORDER BY pub.autores
这可能是例外的原因。按集合排序没有意义。
另一个问题是
SELECT publicacao
publicacao
不是查询中定义的别名。您应该使用select pub
代替。
此外,您不应在@Column
上拥有autores
注释。它是一个ManyToMany关联,因此不会映射为列。您还可以在inverseJoinColumns
使用joinColumns
,反之亦然。
答案 1 :(得分:0)
我认为问题仅在于使用未定义的别名。而不是写作
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;
}