我正在使用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实体来处理这种情况。由于历史原因,数据非常混乱,遗憾的是我必须按原样处理它。