使用外键加入列

时间:2013-07-19 16:24:39

标签: java hibernate annotations jointable sql-server-2012-express

我创建了一个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

是否有其他注释具有我想要的效果?或者我使用当前的错误? 谢谢!

1 个答案:

答案 0 :(得分:0)

单词 order 是T-SQL中的特殊语句。 - >使用 []

select [order].* 
from [order]
left outer join Article on [order].FK_ArticleNr = Article.PK_ArticleNr
order by price