- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我试图用额外的列(日期)表示多对多关联,如下所示:
Encaissement(id)-----Etat_Encaissement(id_etat)(多对多关系)
新关联是 EncaissementEtatEncaissement,它将包含两个实体的 ID 和一个额外的 Date-Etat 列。
我已遵循此文档并执行了完全相同的步骤。这是我的类(class):===================实体启用====================== =
@Entity
@Inheritance(strategy=InheritanceType.JOINED)
@DiscriminatorColumn(name="ENCAISS_TYPE")
@Table(name="ENCAISSEMENT")
public class Encaissement extends encaiss implements Serializable{
@ManyToOne(cascade = CascadeType.PERSIST, fetch = FetchType.LAZY)
@JoinColumn(name = "ID_CLIENT")
protected Client Client;
@OneToMany(cascade = CascadeType.PERSIST, fetch = FetchType.LAZY, mappedBy="encaissement")
protected Set<EncaissementEtatEncaissement> etats_enc_etats;
// Ajouter un etat a l'encaissement.
public void addEtat(Etat_Encaissement etat, Date dateEtat) {
EncaissementEtatEncaissement encaiss_etat_encaiss = new EncaissementEtatEncaissement();
encaiss_etat_encaiss.setEtat_encaissements(etat);
encaiss_etat_encaiss.setEncaissement(this);
encaiss_etat_encaiss.setId_etat_encaissement(etat.getId_etat_encaissement());
encaiss_etat_encaiss.setId_encaissement(this.getId_encaissement());
encaiss_etat_encaiss.setDateEtat(dateEtat);
this.etats_enc_etats.add(encaiss_etat_encaiss);
// Also add the association object to the etat.
etat.getEncaissements().add(encaiss_etat_encaiss);
}
@Column(name="LIBELLE")
protected String libelle;
@Column(name="PIECE_JOINTE")
protected String piece_jointe;
public Set<EncaissementEtatEncaissement> getEtats_enc_etats() {
return etats_enc_etats;
}
public void setEtats_enc_etats(Set<EncaissementEtatEncaissement> etats_enc_etats) {
this.etats_enc_etats = etats_enc_etats;
}
@Temporal(TemporalType.DATE)
@Column(name="DATE_ENCAISSEMENT")
protected Date date_encaissement;
@Embedded
protected Avis_Recette avis_recette;
public Encaissement(String libelle, String piece_jointe, Date date_encaissement){
this.libelle=libelle;
this.piece_jointe=piece_jointe;
this.date_encaissement=date_encaissement;
}
public Encaissement(){
}
}
====================实体Etat_Encaissement================== ====
@Entity
@Table(name="ETAT_ENCAISSEMENT")
public class Etat_Encaissement implements Serializable{
@Id
@GeneratedValue(strategy=GenerationType.AUTO, generator="etat_encaissement_seq_gen")
@SequenceGenerator(name="etat_encaissement_seq_gen", sequenceName="ETAT_ENCAISSEMENT_SEQ", allocationSize = 1, initialValue = 1)
private long id_etat_encaissement;
//@ManyToMany(mappedBy="etats", cascade = CascadeType.PERSIST, fetch = FetchType.LAZY)
//private Set<Encaissement> Encaissements;
@OneToMany(mappedBy="etat_encaissements")
private Set<EncaissementEtatEncaissement> encaissements;
@Column(name="LIBELLE")
private String libelle;
public Etat_Encaissement(String libelle){
this.libelle=libelle;
}
public Etat_Encaissement(){
}
}
================Entity Encaissement_Etat_Encaissement====================该实体包含 Encaissement 和 Etat_Encaissement 的 id 以及日期列
@Entity
@Table(name="ENCAISSEMENT_ETAT_ENCAISSEMENT")
@IdClass(EncaissementEtatEncaissementId.class)
public class EncaissementEtatEncaissement {
@Id
private long id_etat_encaissement;
@Id
private long id_encaissement;
@Temporal(TemporalType.DATE)
@Column(name="DATE_ETAT_ENCAISS")
private Date dateEtat;
@ManyToOne
@PrimaryKeyJoinColumn(name="ID_ETAT_ENCAISSEMENT", referencedColumnName="ID_ETAT_ENCAISSEMENT")
private Etat_Encaissement etat_encaissements;
@ManyToOne
@PrimaryKeyJoinColumn(name="ID_ENCAISSEMENT", referencedColumnName="ID_ENCAISSEMENT")
false, referencedColumnName = "id")
private Encaissement encaissement;
public EncaissementEtatEncaissement(Date dateEtat){
this.dateEtat=dateEtat;
}
public EncaissementEtatEncaissement(){
}
}
最后一个类的 ID :
public class EncaissementEtatEncaissementId implements Serializable{
private long id_etat_encaissement;
private long id_encaissement;
public int hashCode() {
return (int)(id_etat_encaissement + id_encaissement);
}
public boolean equals(Object object) {
if (object instanceof EncaissementEtatEncaissementId) {
EncaissementEtatEncaissementId otherId = (EncaissementEtatEncaissementId) object;
return (otherId.id_etat_encaissement == this.id_etat_encaissement) && (otherId.id_encaissement == this.id_encaissement);
}
return false;
}
}
==============我使用这个简单的代码将Etat_encaissement的实例关联到Encaissement,通常会向Encaissement_Etat_Encaissement添加一个新行========== ===================
private Etat_Encaissement etat_record;
//Code here
etat_record=saut.getEtatFromLibelle("source_identifiee");//This just return an instance of Etat
encaissEspece.addEtat(etat_record, new java.util.Date()); // here i call addEtat which trigger the problem
问题:
我在 Encaissement 类的 addEtat 方法中得到 java.lang.Exception [ this.etats_enc_etats.add(encaiss_etat_encaiss);
] 并且日志表明 etats_enc_etats 为 null 所以我无法将 Encaissement_Etat (在本例中为记录)添加到 Encaissement (在本例中为 encaissEspece),而所有这一切都是因为 etats_enc_etats== 的实例空
(再次:
@OneToMany(cascade = CascadeType.PERSIST, fetch = FetchType.LAZY, mappedBy="encaissement")
protected Set<EncaissementEtatEncaissement> etats_enc_etats; //)
任何人都可以帮我解决这个问题吗?谢谢。
最佳答案
您遇到的问题可能是由于您未设置的基本映射上有@ID。由于这些值为 null,JPA 将 null 插入到 PK 值中。您必须在当前设置中手动设置 ID 映射,这需要首先保留 Encaissement 和 Etat_Encaissement 实例并刷新以便分配它们的 ID,然后使用这些值来设置 EncaissementEtatEncaissement 实例的 id_etat_encaissement 和 id_encaissement 值。
如果您使用的是 JPA 2.1,您可以使用 @ID 标记 EncaissementEtatEncaissement etat_encaissements 和 encaissement 关系,JPA 将为您设置值:
@Entity
@Table(name="ENCAISSEMENT_ETAT_ENCAISSEMENT")
@IdClass(EncaissementEtatEncaissementId.class)
public class EncaissementEtatEncaissement {
@Temporal(TemporalType.DATE)
@Column(name="DATE_ETAT_ENCAISS")
private Date dateEtat;
@Id
@ManyToOne
@JoinColumn(name="ID_ETAT_ENCAISSEMENT", referencedColumnName="ID_ETAT_ENCAISSEMENT")
private Etat_Encaissement etat_encaissements;
@Id
@ManyToOne
@JoinColumn(name="ID_ENCAISSEMENT", referencedColumnName = "id")
private Encaissement encaissement;
..
}
您还可以使用@MapsId注释并保留id_etat_encaissement和id_encaissement属性,但如果不使用它们,则不需要它们。
关于java - 多对多额外列 eclipselink 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29417191/
我主要根据 EclipseLink 网站上的教程编写了以下代码: Partner p = new Partner(); p.setId(1); p.setKey("a");
我主要根据 EclipseLink 网站上的教程编写了以下代码: Partner p = new Partner(); p.setId(1); p.setKey("a");
我目前尝试在 WebLogic Server 12c 中运行 Docx4j。 WebLogic Server 12c 随 EclipseLink 2.3.2 一起提供。 有一个类似的Post描述不幸的
例如,在 EclipseLink 中使用 @AdditionalCriteria 很容易过滤掉软删除的实体,但是有什么方法可以在执行特定查询之前暂时禁用它? 最佳答案 是的,这是可能的,有一个简单的解
我们正在考虑从 Oracle Kodo JDO 迁移到 TopLink 11g JPA。但我发现 EclipseLink 确实存在,而且似乎更应该感谢 Toplink。目前关于它的维基文章指出 Ecl
我正在使用 h2 为使用 Eclipselink、Arquillian 和 Weblogic 12.1.1 的应用程序设置集成测试 这是我的实体: @Entity @Table(name = "AFI
我正在创建一个简单的应用程序,我将在其中使用对象关系映射。我听说过 eclipselink JPA 并做了一个 POC。看起来就像在我本地工作。 我脑子里有两个问题。 eclipselink 与环境有
加载有什么区别: 对比 我可以看到在 maven“EclipseLink”中命名的 Eclipselink 比另一个有更多的类和实用程序......例如目标数据库: org.eclipse.per
我的目标是学习 JavaEE,还有什么比参与项目更好的方法呢?因此,我开始创建一个股票市场模拟 Web 应用程序。当然,一个人拥有一些由公司代码 (company_id) 标识的股票以及所拥有的相关股
Bundle org.eclipse.persistence.extension_2.7.0.qualifier.jar(我安装到 osgi 框架)包含类 org.eclipse.persistenc
我正在尝试向我的 Spring 数据 jpa 存储库添加 Multi-Tenancy 支持。我想为每个请求动态设置租户 ID,但它不适用于自定义查找器 查找* 存储库上的方法。 我已遵循此指南:htt
我使用 Spring Data JPA 和 EclipseLink 2.5.2 作为我的 JPA 提供程序。我使用的数据库是 PostgreSQL。我有一个具有自动递增序列号的表,如下所示: CREA
我无法在单元测试中找到 ecbDB JTA 数据源。 对于 RESOURCE_LOCAL,相同的 persistence.xml 工作。只有在 EJB 容器内,它才无法定位 JTA 数据源。 执行单元
我收到一条错误消息: 异常[EclipseLink-6004] ...对象bla不是来自这个UnitOfWork对象空间,而是来自父 session 的对象空间。该对象从未在此UnitOfWork中注
在将我的 jpa 项目部署到 Wildfly 服务器时,我收到以下警告: The collection of metamodel types is empty. Model classes may n
我定义了一些实体,现在想生成表。 我使用Eclipselink 2.5(JPA 2.1)和Glassfish 4.0,我的程序使用JKD7。 当我构建应用程序时,会显示以下消息: warning: S
我使用的是最新的 EclipseLink 版本和 MySQL 5.5(表类型 InnoDB)。我一次插入大约 30900 条记录(也可能更多)。问题是,插入性能很差:插入所有记录大约需要 22 秒(与
我在持久化实体并在持久化发生后获取 id 时遇到了问题。我可以看到数据是在数据库中创建的,具有正确的 id,但对象处的 id 仍然为 null。 这是我的实体: @Entity public clas
我使用 eclipselink 2.6.3,我需要确切地知道连接池是否由 Eclipselink 创建和使用。 如果persistence.xml我有如下设置 但是,这两种情况的日志是相同的
我正在使用 EclipseLink,并将“eclipselink.ddl-generation”属性设置为“create-tables”。创建的表中列的顺序似乎是随机的。我想要特定顺序的列 - 字段在
我是一名优秀的程序员,十分优秀!