我创建了一个Entity-Bean,它映射了我的MSSQL Server 2012的订单表。 到目前为止,它工作正常,但我想加入文章视图中的一些列,以提供所选文章的更多信息。
该订单包含多行,其ID为Prime-Key,Article-Nr为Foreign-Key。
我尝试将带有文章的View映射到文章实体,但是由于行数(> 10.000),它减慢了所有内容(但它应该工作......只是非常慢......太有了...除了3行信息外,没有其他需要再映射此视图了。所以我只想加入Order-Entity的必要列。
但是我没有让它发挥作用......
我用Annotation“NamedQuery”
尝试了它@Entity
@NamedNativeQuery(name = "Joinnecessary",
query = "SELECT Order.PK_ID, Order.FK_OrderID, Order.FK_ArticleNr, Order.Amount,
Article.Description, Article.Price
FROM Order left outer join Article
on Order.FK_ArticleNr=Article.PK_ArticleNr",
resultClass = Order.class)
我不确定问题到底在哪里......我的记录 - 实体有一个订单实体列表并显示它们。
for(orders o: orderlist){
在这一行中,我收到以下错误:
严重:无效的对象名称“订单”。 线程“main”中的异常org.hibernate.exception.SQLGrammarException:无法初始化集合:[qohelet.Record.orders#1] 在org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:67)
在文献中,我发现了一些有趣的地图,用于绘制1:1关系。 (从这个角度来看,我的关系可以看作是这样的)如果找到@ SecondaryTable-Annotation哪个可以是解决我所有问题的好方法:
@Table(name = "Order")
@SecondaryTable(name = "Article", pkJoinColumns = {
@PrimaryKeyJoinColumn(name = "PK_ArticleNr", referencedColumnName = "FK_ArticleNr")
})
我加入的其他列如下:
@Column(table = "Article")
private String description;
但是我猜注释“PrimaryKeyJoinColumn”没有被无条件地命名......
创建初始SessionFactory failed.org.hibernate.AnnotationException:SecondaryTable JoinColumn 无法引用非主键
线程“main”中的java.lang.ExceptionInInitializerErrorException
是否有其他注释具有我想要的效果?或者我使用当前的错误? 谢谢!
答案 0 :(得分:0)
单词 order 是T-SQL中的特殊语句。 - >使用 [] :
select [order].*
from [order]
left outer join Article on [order].FK_ArticleNr = Article.PK_ArticleNr
order by price