java - 在实体中建立自动关系时错误事务中止
问题描述
我有一个公司(Empresa)和专业(Profissional)实体,我需要在公司和公司(总部和分公司)之间建立自我关系。专业人员具有技术职责 (ResponsabilidadeTecnica),除其他属性外,他们负责的公司。但是,当我放置此属性时,在尝试加载由以下原因引起的对象时出现 Transaction Aborted 错误:`Caused by: org.hibernate.PropertyAccessException:IllegalArgumentException 发生调用 br.org.creapi.entities.Pessoa.codigo 的 getter。如果我删除自我关系,则不会发生中止的事务。我无法理解错误的来源或如何解决它。
实体和方法写在 PT-BR
实体:
@Entity
@Table(name = "empresa")
@PrimaryKeyJoinColumn(name = "codigo")
public class Empresa extends Pessoa implements Serializable {
private Empresa matriz;
// OTHER ATTRIBUTES
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "matriz_codigo", insertable = true, updatable = true, nullable = true)
public Empresa getMatriz() {
return matriz;
}
public void setMatriz(Empresa matriz) {
this.matriz = matriz;
}
// OTHER METHODS
}
@Entity
public class ResponsabilidadeTecnica implements Serializable {
private ResponsabilidadeTecnicaPk pk;
@EmbeddedId
public ResponsabilidadeTecnicaPk getPk() {
return pk;
}
public void setPk(ResponsabilidadeTecnicaPk pk) {
this.pk = pk;
}
// OTHER ATTRIBUTES AND METHODS
}
@Embeddable
public class ResponsabilidadeTecnicaPk implements Serializable {
private Empresa empresa;
private Profissional profissional;
private Date inicioResponsabilidade;
private String inicioResponsabilidadeFormatado;
public ResponsabilidadeTecnicaPk() {
this.empresa = new Empresa();
this.profissional = new Profissional();
}
@ManyToOne
public Empresa getEmpresa() {
return empresa;
}
public void setEmpresa(Empresa empresa) {
this.empresa = empresa;
}
}
发生错误的方法:
@Override
public Profissional profissionalCompletoArtOnLine(String codigo) {
Profissional profissional = pesquisarPorId(codigo);
Hibernate.initialize(profissional.getEnderecosPessoas());
Hibernate.initialize(profissional.getTitulos());
Hibernate.initialize(profissional.getPosgraduacoes());
Hibernate.initialize(profissional.getResponsabilidadesTecnicas()); // THE ERROR OCCURS HERE
Collections.sort(profissional.getResponsabilidadesTecnicas(), comparator);
return profissional;
}
当 hibernate 加载专业人员拥有的技术职责列表时,会发生事务中止错误。
解决方案
推荐阅读
- .net - 将 JS 引用添加到 OrchardCore 模块
- firefox - Firefox 76 是否可以强制将 .localhost 子域视为没有 tls 的安全上下文?
- r - 使用 id 变量重复的分组重塑 data.frame
- excel - 将所有 VBA 代码从工作簿复制到另一个
- sql-server - 使用 SQL 导入工具导入 Salesforce Dataloader CSV 时经常出现“潜在的数据丢失”错误
- google-cloud-functions - 谷歌云功能向物联网设备发送命令
- linux - Nagios - 无法读取输出
- r - 在 R 中使用 ggplot 为每个国家创建一个折线图
- c# - Swagger 文件上传给出 415 Unsupported Media Type
- docker - Symfony 发送邮件错误(Mailer 和 SwiftMailer)