以下情况:当我尝试使用@EmbeddedId字段保存实体时,hibernate会使字段" mandant"从基类到" contact_mandant"抛出无效的标识符错误。表格中的列名称"联系人"是" mandant"而不是" contact_mandat"。 我只是不明白为什么会自动更改字段名称。 这里有一些代码:
@MappedSuperclass
public abstract class BaseId implements Serializable {
@Column(name = "Mandant", precision = 2, nullable = false)
protected Byte mandant;
...getter, setter...
}
@Embeddable
public class ContactId extends BaseId implements Serializable {
@Column(name = "Id_Contact", precision = 9)
private Long id;
...getter, setter...
}
@Entity
public class Contact extends Base {
@EmbeddedId
private ContactId contactId;
...getter, setter...
}
@Entity(name = "Employee")
public class Employee extends Base {
@EmbeddedId
private EmployeeId id;
@MapsId("contactId")
@JoinColumns(value = {
@JoinColumn(referencedColumnName = "Mandant"),
@JoinColumn(referencedColumnName = "Id_Contact")
})
@OneToOne(fetch = FetchType.LAZY)
private Contact contact;
...getter, setter...
}
@Embeddable
public class EmployeeId extends BaseId implements Serializable {
@Column(name = "Id_Employee", precision = 9)
private Long id;
private ContactId contactId;
...getter, setter...
}
我来自.Net世界,我对JPA还不太熟悉。有人可以给我一个友好的提示,说明我做错了什么,或者我的实施问题出在哪里,拜托?
祝你好运 新闻记者
P.s。:Spring 4和Hibernate 5
答案 0 :(得分:0)
使用共享组合密钥的解决方案:
没有" id"在@MapsId框架中生成以下查询:
"插入EMPLOYEE_DETAILS(AEN_DATUM,SACHB_KZ,DETAILS,employee_id_employee,employee_MANDANT)值(?,?,?,?,?)"
添加" id"到@MapsId查询是:
"插入EMPLOYEE_DETAILS(AEN_DATUM,SACHB_KZ,DETAILS,id_employee,MANDANT)值(?,?,?,?,?)"
@Entity(name = "Employee")
@Table(name = "EMPLOYEE")
public class Employee extends Base {
@EmbeddedId
private EmployeeId id;
@Column(name = "FIRST_NAME", length = 100, nullable = false)
private String firstName;
@Column(name = "SUR_NAME", length = 100, nullable = false)
private String surName;
...
}
@Embeddable
public class EmployeeId extends BaseId implements Serializable {
@Column(name = "id_employee", precision = 9)
private Long employeeId;
...
}
@Entity(name = "EmployeeDetails")
@Table(name = "EMPLOYEE_DETAILS")
public class EmployeeDetails extends Base {
@EmbeddedId
private EmployeeId id;
@Column(name = "DETAILS", nullable = false)
private String details;
@MapsId("id")
@OneToOne
private Employee employee;
...
}
它与上面的实现不一样,但问题是一样的。该查询是使用CONTACT_MANDANT而非MANDANT生成的。
和平