我有EranChamp
实体
@Entity
@IdClass(EcranChampId.class)
public class EcranChamp {
@Id
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "ecran")
Ecran ecran;
@Id
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "champ")
Champ champ;
...
和EcranChampId
@Embeddable
public class EcranChampId implements Serializable {
private Champ champ;
private Ecran ecran;
...
每次尝试保存EcranChamp元素时,我都会出现以下错误
2018-09-25 12:15:42.889警告14216---[nio-8092-exec-8]。w、 s.m.s.DefaultHandlerExceptionResolver:无法转换请求元素:org。springframework。豆子。ConversionNotSupportedException:未能转换“java”类型的属性值。lang.Long“to required type”com。开普勒。portailclient。领域模型“Ecran”表示财产“Ecran”;嵌套异常为java。lang.IllegalStateException:无法转换“java”类型的值。lang.Long“to required type”com。开普勒。portailclient。领域模型属性“Ecran”的“Ecran”:未找到匹配的编辑器或转换策略2018-09-25 12:15:42.889 WARN 14216-[nio-8092-exec-8]。w、 s.m.s.DefaultHandlerExceptionResolver:已解决由处理程序执行引起的异常:org。springframework。豆子。ConversionNotSupportedException:未能转换“java”类型的属性值。lang.Long“to required type”com。开普勒。portailclient。领域模型“Ecran”表示财产“Ecran”;嵌套异常为java。lang.IllegalStateException:无法转换“java”类型的值。lang.Long“to required type”com。开普勒。portailclient。领域模型属性“Ecran”的“Ecran”:未找到匹配的编辑器或转换策略
您应该使用嵌入ID注释。
请将您的EranChampId
类更改为:
@Embeddable
public class EcranChampId implements Serializable {
@ManyToOne
private Champ champ;
@ManyToOne
private Ecran ecran;
//getters and setters
}
并将您的EcranChamp类更改为:
@Entity
@Table(name = "champ_has_ecran_table_name")
@AssociationOverrides({
@AssociationOverride(name = "pk.champ", joinColumns = @JoinColumn(name = "champ_id"))
@AssociationOverride(name = "pk.ecran", joinColumns = @JoinColumn(name = "ecran_id"))
})
public class EcranChamp {
@EmbeddedId
private EcranChampId pk;
public EcranChamp() {
pk = new EcranChampId();
}
public EcranChampId getPk() {
return pk;
}
public void setPk(EcranChampId pk) {
this.pk = pk;
}
@Transient
public Champ getChamp() {
return pk.getChamp();
}
public void setChamp(Champ champ) {
pk.setChamp(champ);
}
@Transient
public Ecran getEcran() {
return pk.getEcran();
}
public void setChamp(Ecran ecran) {
pk.setEcran(ecran);
}
}
使用方法如下:
public class Champ {
@OneToMany(mappedBy = "pk.champ")
private Collection<EcranChamp> ecranChamps;
//getters and setters
}
此外,如果EcranChamp或EcranChampId没有其他字段,我建议您使用多个注释来代替EcranChamp类,如下所示:
public class Champ {
@ManyToMany
@JoinTable(
name = "champ_has_ecran_table_name",
joinColumns = @JoinColumn(name = "champ_id", referencedColumnName = "id", nullable = false),
inverseJoinColumns = @JoinColumn(name = "ecran_id", referencedColumnName = "id", nullable = false)
)
private Collection<Ecran> ecrans;
//getters and setters
}
尝试以下操作:
@Entity
@Table(name = "<entity name>")
public class EcranChamp {
@EmbeddedId
@AttributeOverrides({ @AttributeOverride(name = "id_ecran", column = @Column(name =
"<column name>", nullable = false)),
@AttributeOverride(name = "id_champ", column = @Column(name = "<column name>", nullable = false)) })
EcranChampId id
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "id_ecran")
Ecran ecran;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "id_champ")
Champ champ;
//getters & setters
}
@Embeddable
public class EcranChampId implements Serializable {
@Column(name = "id_champ", nullable = false)
private Long id_champ;
@Column(name = "id_ecran", nullable = false)
private Long id_ecran;
//getters & setters
}
我有一个实体 我有这个错误
我是JPA和Spring的初学者。这也是我的第一个问题。所以,为我的错误道歉。我正在练习以简单的场景作为开始。我有两个实体作为产品和类别,具有双向多对一/一对多关联。 类别类: 产品类别: CategoryRepository和ProductRepository都是从JpaRepository实现的。很少有带有@Query注释的方法签名。 使用@autowmed存储库的服务。没有任何商业逻辑。 类
我想删除所有具有某些lineId的记录,以保存另一个具有相同lineId的记录(作为刷新),但删除后我无法保存任何内容。没有任何错误,但数据库中没有我的记录。 当我没有删除代码时,一切都会正确保存。
我最近开始使用Spring Boot(我主要来自Python/flask和node背景)和JPA和thymeleaf,并且我正在尝试在我的数据库中创建一个项目。一切都很顺利,我可以添加,删除等。项目。 我的控制器看起来是这样的:
问题内容: 说,我有以下实体: 通过结合使用模式自动生成功能,我得到了一个附加表,其中包含和之间的映射。但是,我想实现通过添加一个一对多的关系的 编号 为( 例如,没有附加表 )。 这可能吗?如果是,我应该使用什么注释来创建这种映射? 问题答案: 通常,使用@JoinColumn批注是可能的。它也适用于可嵌入对象。 如果您对embeddable中指定的列的A_ID名称不满意,则可以覆盖实体A中的列
在使用hibernate和jpa的spring mvc项目中,我有一个实体和一个实体。每个可以有许多,但每个只能有一个。如何为现有的保存新的? 我读过很多关于这个的帖子。如果我试图保存新的,就会出现无法保存分离实体的错误。但如果我试图保存现有的,则不会保存该角色。我读了这篇帖子,建议将hibernate注释移动到getter,但当我这样做时,我会收到一个引用未知属性的hibernate映射错误。这