【发布时间】:2020-04-29 19:33:26
【问题描述】:
我正在重写一个项目,但我遇到了构建问题。
Caused by: org.hibernate.DuplicateMappingException: Table [language] contains physical column name [person_id] referred to by multiple logical column names: [person_id], [personId]
在哪里
@Builder
@Data
@AllArgsConstructor
@NoArgsConstructor
@Entity
@IdClass(LanguagePK.class)
@Table(name = "language")
public class Language {
@Id
@Column(name = "person_id")
private int personId;
@Id
@Column(name = "position")
private int position;
@Id
@Column(name = "language_name")
private String languageNameVal;
@Column(name = "language_level")
private String languageLevelVal;
@ManyToOne
@JoinColumn(name = "person_id", referencedColumnName = "id", nullable = false, insertable = false,updatable = false)
@JsonBackReference(value = "languages")
private Person person;
@ManyToOne
@JoinColumn(name = "language_name", referencedColumnName = "name", nullable = false, insertable = false,updatable = false)
@JsonIgnore
private LanguageName languageName;
@ManyToOne
@JoinColumn(name = "language_level", referencedColumnName = "level", nullable = false, insertable = false,updatable = false)
@JsonIgnore
private LanguageLevel languageLevel;
}
和
@Builder
@Data
@NoArgsConstructor
@AllArgsConstructor
@Entity
@Table(name = "person")
public class Person implements Serializable{
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private int id;
@JsonManagedReference(value = "languages")
@OneToMany(mappedBy = "person", cascade = {CascadeType.PERSIST, CascadeType.MERGE})
private Set<Language> languages;
我用
- 休眠版本 5.4.13.Final
- spring-boot v. 2.2.5.RELEASE
- 分级
- java 1.8
- 龙目岛
这些变化非常小,就像我使用 maven、SessionFactory 用于休眠、传统的 getter 和 setter 之前一样。
我在 hibernate 4 和 5 之间的迁移过程中看到了一些类似的问题,其中 NamingStrategy 是一个问题,但是此代码适用于 hiberante 为 5.4.10.Final 的第一个项目。
我喜欢 IdClass,因为我可以将 personId 作为原始值访问,并且不必从对象 person 加载数据。
我在没有insertable = false,updatable = false 的情况下看到了类似的问题,但我有它......
发现类似问题here
【问题讨论】: