可能在null键

时间:2016-04-07 09:59:08

标签: java jpa java-ee jpa-2.1

我正在使用JPA 2.1和EJB 3.2构建基于JavaEE7的应用程序。 我试图根据Oracle数据库中的表来定义带有JPA的实体。我使用EclipseLink作为JPA的实现。

我的情况是检索存储在数据库中的翻译。所有翻译都存储在一个表中,并使用密钥和语言ID进行标识。

我无法改变数据库的组织方式,而且我是JPA的初学者。

以下是翻译表中的行示例:

翻译:

TRANS_ID | TRANS_KEY                     | TRANS_VALUE | LAN_ID
1        | APPVERSION_APPV_COMMENT_1215  | Du texte    | 1
2        | APPVERSION_APPV_COMMENT_1215  | Some text   | 2

其中LAN_ID:1对应于法语翻译,LAN_ID:2是英语翻译。

TRANSLATION的实体如下所示:

@Entity
@Table(name = "TRANSLATION")
@NamedQueries({
    @NamedQuery(name="Translation.findAll", query="SELECT trans FROM Translation trans")
})
public class Translation implements Serializable {

    @Id
    @Column(name = "TRANS_ID", nullable = false)
    private Integer translationId;

    @Column(name = "TRANS_KEY", nullable = false)
    private String translationKey;

    @Column(name = "TRANS_VALUE")
    private String translationValue;

    @Column(name = "LAN_ID", nullable = false)
    private Integer languageId;

}

以下是使用翻译的表格的可能情况:

APPVERSION:

APPV_ID | APPV_COMMENT
0       | APPVERSION_APPV_COMMENT_1215
1       | (null)
2       | some texte with no reference to translation table

以下是我可以在列使用翻译中使用的树案例。第三种情况是由于历史原因。

我想实现一个JPA实体来表示表APPVERSION,我可以在不使用JPQL的情况下检索转换。

我尝试了一个看起来像这样的实体(简化版):

@Entity
@Table(name = "APPVERSION")
@NamedQueries({
    @NamedQuery(name="AppVersion.findAll", query="SELECT app FROM AppVersion app")
})
public class AppVersion implements Serializable {

    @Id
    @Column(name = "APPV_ID", nullable = false)
    private Integer applicationVersionId;

    @OneToMany()
    @JoinColumn(name = "TRANS_KEY", referencedColumnName = "APPV_COMMENT", nullable = true)
    //As a beginer who don't get it all I also tryed the following. With quite the same result
    //@JoinColumn(name = "APPV_COMMENT", referencedColumnName = "TRANS_KEY", nullable = true)
    private List<Translation> applicationVersionComment;

}

使用,以下

@JoinColumn(name = "TRANS_KEY", referencedColumnName = "APPV_COMMENT", nullable = true)

我收到错误说:

  

引起:异常[EclipseLink-6094](Eclipse Persistence Services - 2.6.1.v20150916-55dc7c3):org.eclipse.persistence.exceptions.QueryException
      异常说明:查询选择条件中的参数名称[APPV_COMMENT]与查询中定义的任何参数名称都不匹配。

以下

@JoinColumn(name = "APPV_COMMENT", referencedColumnName = "TRANS_KEY", nullable = true)

我收到错误说:

  

引起:异常[EclipseLink-6094](Eclipse Persistence Services - 2.6.1.v20150916-55dc7c3):org.eclipse.persistence.exceptions.QueryException
      异常说明:查询的选择条件中的参数名称[TRANS_KEY]与查询中定义的任何参数名称都不匹配。

我想知道如何用JPA实体来处理这种情况。由于历史原因,数据非常混乱,遗憾的是我必须按原样处理它。

0 个答案:

没有答案