【问题标题】:Join columns with ForeignKeys使用外键连接列
【发布时间】:2013-07-19 00:41:38
【问题描述】:

我创建了一个实体 Bean,它映射了我的 MSSQL Server 2012 的订单表。 到目前为止它工作正常,但我想加入文章视图中的一些列,为所选文章提供更多信息。

订单由几行组成,其 ID 为 Prime-Key,Article-Nr 为 Foreign-Key。

我试图将带有文章的视图映射到文章实体中,但由于行数 (>10.000),它会减慢所有速度(但可以正常工作......只是慢得令人难以置信......也没有其他需要映射此视图 - 除了 3 行信息)。所以我只想将必要的列加入 Order-Entity。

但我没有让它工作......

我尝试使用注释“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){

在这一行中,我收到以下错误:

严重:对象名称“订单”无效。 线程“主”org.hibernate.exception.SQLGrammarException 中的异常:无法初始化集合:[qohelet.Record.orders#1] 在 org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:67)

在文献中,我发现了一些有趣的东西来映射 1:1-Relations。 (从这个角度来看,我的关系可以看作是这样的)如果发现@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

是否有另一个注释具有我想要的效果?还是我使用当前的错误? 谢谢!

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 2018-09-08
      • 2012-03-29
      • 2018-09-09
      • 1970-01-01
      • 2016-02-19
      • 2017-02-24
      • 2011-08-07
      • 1970-01-01
      • 2018-01-08
      相关资源
      最近更新 更多