Java Spring继承,多对多,实体映射中的重复列
您好,我正在尝试映射两个类之间的多对多关系,员工和经理从类人扩展而来。问题是这两个类都有相同的id,因为它们从同一个超类扩展而来。这就是为什么我会有例外Java Spring继承,多对多,实体映射中的重复列,java,spring,hibernate,inheritance,many-to-many,Java,Spring,Hibernate,Inheritance,Many To Many,您好,我正在尝试映射两个类之间的多对多关系,员工和经理从类人扩展而来。问题是这两个类都有相同的id,因为它们从同一个超类扩展而来。这就是为什么我会有例外 ... Repeated column in mapping for entity ... 请通过保留继承设计来帮助解决此问题 注意:relaship生成的类具有额外的属性 Java类 人 import java.util.ArrayList; import java.util.Iterator; import java.util.List;
... Repeated column in mapping for entity ...
请通过保留继承设计来帮助解决此问题
注意:relaship生成的类具有额外的属性
Java类
人
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.DiscriminatorColumn;
import javax.persistence.DiscriminatorType;
import javax.persistence.DiscriminatorValue;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Inheritance;
import javax.persistence.InheritanceType;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
@Entity
@Table(name = "PERSON")
@Inheritance(strategy=InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(
name="discriminator",
discriminatorType=DiscriminatorType.STRING
)
@DiscriminatorValue(value="P")
public class Person {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "PERSON_ID")
protected int personId;
@Column(name = "PERSON_FIRST_NAME")
protected String personFirstName;
@Column(name = "PERSON_LAST_NAME")
protected String personLastName;
@Column(name = "PERSON_EMAIL")
protected String personEmail;
@Column(name = "PERSON_IMAGE")
protected String personImage;
// Constructors and Getter/Setter methods,
public Person() {
}
/**
* @param personId
* @param personFirstName
* @param personLastName
* @param personEmail
* @param personImage
*/
public Person(String personFirstName, String personLastName, String personEmail, String personImage) {
this.personFirstName = personFirstName;
this.personLastName = personLastName;
this.personEmail = personEmail;
this.personImage = personImage;
}
public int getPersonId() {
return personId;
}
public void setPersonId(int personId) {
this.personId = personId;
}
public String getPersonFirstName() {
return personFirstName;
}
public void setPersonFirstName(String personFirstName) {
this.personFirstName = personFirstName;
}
public String getPersonLastName() {
return personLastName;
}
public void setPersonLastName(String personLastName) {
this.personLastName = personLastName;
}
public String getPersonEmail() {
return personEmail;
}
public void setPersonEmail(String personEmail) {
this.personEmail = personEmail;
}
public String getPersonImage() {
return personImage;
}
public void setPersonImage(String personImage) {
this.personImage = personImage;
}
}
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Invocation of init method failed; nested exception is javax.persistence.PersistenceException: [PersistenceUnit: default] Unable to build Hibernate SessionFactory
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1710) ~[spring-beans-5.0.4.RELEASE.jar:5.0.4.RELEASE]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:583) ~[spring-beans-5.0.4.RELEASE.jar:5.0.4.RELEASE]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:502) ~[spring-beans-5.0.4.RELEASE.jar:5.0.4.RELEASE]
at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:312) ~[spring-beans-5.0.4.RELEASE.jar:5.0.4.RELEASE]
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:228) ~[spring-beans-5.0.4.RELEASE.jar:5.0.4.RELEASE]
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:310) ~[spring-beans-5.0.4.RELEASE.jar:5.0.4.RELEASE]
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) ~[spring-beans-5.0.4.RELEASE.jar:5.0.4.RELEASE]
at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1085) ~[spring-context-5.0.4.RELEASE.jar:5.0.4.RELEASE]
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:858) ~[spring-context-5.0.4.RELEASE.jar:5.0.4.RELEASE]
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:549) ~[spring-context-5.0.4.RELEASE.jar:5.0.4.RELEASE]
at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:752) [spring-boot-2.0.0.RELEASE.jar:2.0.0.RELEASE]
at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:388) [spring-boot-2.0.0.RELEASE.jar:2.0.0.RELEASE]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:327) [spring-boot-2.0.0.RELEASE.jar:2.0.0.RELEASE]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1246) [spring-boot-2.0.0.RELEASE.jar:2.0.0.RELEASE]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1234) [spring-boot-2.0.0.RELEASE.jar:2.0.0.RELEASE]
at org.gestion.GestionCliniqueApplication.main(GestionCliniqueApplication.java:10) [classes/:na]
Caused by: javax.persistence.PersistenceException: [PersistenceUnit: default] Unable to build Hibernate SessionFactory
at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.persistenceException(EntityManagerFactoryBuilderImpl.java:970) ~[hibernate-core-5.2.14.Final.jar:5.2.14.Final]
at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:895) ~[hibernate-core-5.2.14.Final.jar:5.2.14.Final]
at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:57) ~[spring-orm-5.0.4.RELEASE.jar:5.0.4.RELEASE]
at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:365) ~[spring-orm-5.0.4.RELEASE.jar:5.0.4.RELEASE]
at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:388) ~[spring-orm-5.0.4.RELEASE.jar:5.0.4.RELEASE]
at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:377) ~[spring-orm-5.0.4.RELEASE.jar:5.0.4.RELEASE]
at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:341) ~[spring-orm-5.0.4.RELEASE.jar:5.0.4.RELEASE]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1769) ~[spring-beans-5.0.4.RELEASE.jar:5.0.4.RELEASE]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1706) ~[spring-beans-5.0.4.RELEASE.jar:5.0.4.RELEASE]
... 15 common frames omitted
Caused by: org.hibernate.MappingException: Repeated column in mapping for entity: org.gestion.modele.Meeting column: person_id (should be mapped with insert="false" update="false")
at org.hibernate.mapping.PersistentClass.checkColumnDuplication(PersistentClass.java:835) ~[hibernate-core-5.2.14.Final.jar:5.2.14.Final]
at org.hibernate.mapping.PersistentClass.checkPropertyColumnDuplication(PersistentClass.java:853) ~[hibernate-core-5.2.14.Final.jar:5.2.14.Final]
at org.hibernate.mapping.PersistentClass.checkColumnDuplication(PersistentClass.java:875) ~[hibernate-core-5.2.14.Final.jar:5.2.14.Final]
at org.hibernate.mapping.PersistentClass.validate(PersistentClass.java:607) ~[hibernate-core-5.2.14.Final.jar:5.2.14.Final]
at org.hibernate.mapping.RootClass.validate(RootClass.java:265) ~[hibernate-core-5.2.14.Final.jar:5.2.14.Final]
at org.hibernate.boot.internal.MetadataImpl.validate(MetadataImpl.java:329) ~[hibernate-core-5.2.14.Final.jar:5.2.14.Final]
at org.hibernate.boot.internal.SessionFactoryBuilderImpl.build(SessionFactoryBuilderImpl.java:459) ~[hibernate-core-5.2.14.Final.jar:5.2.14.Final]
at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:892) ~[hibernate-core-5.2.14.Final.jar:5.2.14.Final]
... 22 common frames omitted
经理
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Date;
import java.util.Iterator;
import java.util.List;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.DiscriminatorValue;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.OneToMany;
import javax.persistence.PrimaryKeyJoinColumn;
import javax.persistence.Table;
@Entity
@Table(name="PERSON")
@DiscriminatorValue("M")
public class Manager extends Person implements Serializable{
@Column(name="Budget")
private double budget;
@OneToMany( fetch = FetchType.LAZY, mappedBy="manager",
cascade=CascadeType.ALL)
private List<Meeting> listAppointment;
public Manager() {
super();
}
public Manager(String personFirstName, String personLastName, String personEmail, String personImage, double budget) {
super(personFirstName, personLastName, personEmail, personImage);
this.budget=budget;
}
public double getBudget() {
return budget;
}
public void setBudget(double budget) {
this.budget = budget;
}
//meeting
public List<Meeting> getListAppointment() {
if (listAppointment == null)
listAppointment = new ArrayList<>();
return listAppointment;
}
public Iterator<Meeting> getIteratorAppointment() {
if (listAppointment == null)
listAppointment = new ArrayList<>();
return listAppointment.iterator();
}
public void setListAppointment(List<Meeting> newListAppointment) {
removeAllAppointment();
for (Iterator<Meeting> iter = newListAppointment.iterator(); iter.hasNext();)
addAppointment(iter.next());
}
public void addAppointment(Meeting newAppointment) {
if (newAppointment == null)
return;
if (this.listAppointment == null)
this.listAppointment = new ArrayList<>();
if (!this.listAppointment.contains(newAppointment)) {
this.listAppointment.add(newAppointment);
newAppointment.setDoctor(this);
}
}
public void removeAppointment(Meeting oldAppointment) {
if (oldAppointment == null)
return;
if (this.listAppointment != null && this.listAppointment.contains(oldAppointment)) {
this.listAppointment.remove(oldAppointment);
oldAppointment.setDoctor(null);
}
}
public void removeAllAppointment() {
if (listAppointment != null) {
Meeting oldAppointment;
for (Iterator<Meeting> iter = getIteratorAppointment(); iter.hasNext();) {
oldAppointment = iter.next();
iter.remove();
oldAppointment.setDoctor(null);
}
}
}
// End Meeting
}
Java异常
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.DiscriminatorColumn;
import javax.persistence.DiscriminatorType;
import javax.persistence.DiscriminatorValue;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Inheritance;
import javax.persistence.InheritanceType;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
@Entity
@Table(name = "PERSON")
@Inheritance(strategy=InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(
name="discriminator",
discriminatorType=DiscriminatorType.STRING
)
@DiscriminatorValue(value="P")
public class Person {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "PERSON_ID")
protected int personId;
@Column(name = "PERSON_FIRST_NAME")
protected String personFirstName;
@Column(name = "PERSON_LAST_NAME")
protected String personLastName;
@Column(name = "PERSON_EMAIL")
protected String personEmail;
@Column(name = "PERSON_IMAGE")
protected String personImage;
// Constructors and Getter/Setter methods,
public Person() {
}
/**
* @param personId
* @param personFirstName
* @param personLastName
* @param personEmail
* @param personImage
*/
public Person(String personFirstName, String personLastName, String personEmail, String personImage) {
this.personFirstName = personFirstName;
this.personLastName = personLastName;
this.personEmail = personEmail;
this.personImage = personImage;
}
public int getPersonId() {
return personId;
}
public void setPersonId(int personId) {
this.personId = personId;
}
public String getPersonFirstName() {
return personFirstName;
}
public void setPersonFirstName(String personFirstName) {
this.personFirstName = personFirstName;
}
public String getPersonLastName() {
return personLastName;
}
public void setPersonLastName(String personLastName) {
this.personLastName = personLastName;
}
public String getPersonEmail() {
return personEmail;
}
public void setPersonEmail(String personEmail) {
this.personEmail = personEmail;
}
public String getPersonImage() {
return personImage;
}
public void setPersonImage(String personImage) {
this.personImage = personImage;
}
}
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Invocation of init method failed; nested exception is javax.persistence.PersistenceException: [PersistenceUnit: default] Unable to build Hibernate SessionFactory
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1710) ~[spring-beans-5.0.4.RELEASE.jar:5.0.4.RELEASE]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:583) ~[spring-beans-5.0.4.RELEASE.jar:5.0.4.RELEASE]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:502) ~[spring-beans-5.0.4.RELEASE.jar:5.0.4.RELEASE]
at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:312) ~[spring-beans-5.0.4.RELEASE.jar:5.0.4.RELEASE]
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:228) ~[spring-beans-5.0.4.RELEASE.jar:5.0.4.RELEASE]
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:310) ~[spring-beans-5.0.4.RELEASE.jar:5.0.4.RELEASE]
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) ~[spring-beans-5.0.4.RELEASE.jar:5.0.4.RELEASE]
at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1085) ~[spring-context-5.0.4.RELEASE.jar:5.0.4.RELEASE]
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:858) ~[spring-context-5.0.4.RELEASE.jar:5.0.4.RELEASE]
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:549) ~[spring-context-5.0.4.RELEASE.jar:5.0.4.RELEASE]
at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:752) [spring-boot-2.0.0.RELEASE.jar:2.0.0.RELEASE]
at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:388) [spring-boot-2.0.0.RELEASE.jar:2.0.0.RELEASE]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:327) [spring-boot-2.0.0.RELEASE.jar:2.0.0.RELEASE]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1246) [spring-boot-2.0.0.RELEASE.jar:2.0.0.RELEASE]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1234) [spring-boot-2.0.0.RELEASE.jar:2.0.0.RELEASE]
at org.gestion.GestionCliniqueApplication.main(GestionCliniqueApplication.java:10) [classes/:na]
Caused by: javax.persistence.PersistenceException: [PersistenceUnit: default] Unable to build Hibernate SessionFactory
at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.persistenceException(EntityManagerFactoryBuilderImpl.java:970) ~[hibernate-core-5.2.14.Final.jar:5.2.14.Final]
at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:895) ~[hibernate-core-5.2.14.Final.jar:5.2.14.Final]
at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:57) ~[spring-orm-5.0.4.RELEASE.jar:5.0.4.RELEASE]
at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:365) ~[spring-orm-5.0.4.RELEASE.jar:5.0.4.RELEASE]
at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:388) ~[spring-orm-5.0.4.RELEASE.jar:5.0.4.RELEASE]
at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:377) ~[spring-orm-5.0.4.RELEASE.jar:5.0.4.RELEASE]
at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:341) ~[spring-orm-5.0.4.RELEASE.jar:5.0.4.RELEASE]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1769) ~[spring-beans-5.0.4.RELEASE.jar:5.0.4.RELEASE]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1706) ~[spring-beans-5.0.4.RELEASE.jar:5.0.4.RELEASE]
... 15 common frames omitted
Caused by: org.hibernate.MappingException: Repeated column in mapping for entity: org.gestion.modele.Meeting column: person_id (should be mapped with insert="false" update="false")
at org.hibernate.mapping.PersistentClass.checkColumnDuplication(PersistentClass.java:835) ~[hibernate-core-5.2.14.Final.jar:5.2.14.Final]
at org.hibernate.mapping.PersistentClass.checkPropertyColumnDuplication(PersistentClass.java:853) ~[hibernate-core-5.2.14.Final.jar:5.2.14.Final]
at org.hibernate.mapping.PersistentClass.checkColumnDuplication(PersistentClass.java:875) ~[hibernate-core-5.2.14.Final.jar:5.2.14.Final]
at org.hibernate.mapping.PersistentClass.validate(PersistentClass.java:607) ~[hibernate-core-5.2.14.Final.jar:5.2.14.Final]
at org.hibernate.mapping.RootClass.validate(RootClass.java:265) ~[hibernate-core-5.2.14.Final.jar:5.2.14.Final]
at org.hibernate.boot.internal.MetadataImpl.validate(MetadataImpl.java:329) ~[hibernate-core-5.2.14.Final.jar:5.2.14.Final]
at org.hibernate.boot.internal.SessionFactoryBuilderImpl.build(SessionFactoryBuilderImpl.java:459) ~[hibernate-core-5.2.14.Final.jar:5.2.14.Final]
at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:892) ~[hibernate-core-5.2.14.Final.jar:5.2.14.Final]
... 22 common frames omitted
更改列映射名称。例如,来自:
@ManyToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "PERSON_ID")
private Manager manager;
比如:
@ManyToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "PERSON_AS_MNGR_ID")
private Manager manager;
HTH更改列映射名称。例如,来自:
@ManyToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "PERSON_ID")
private Manager manager;
比如:
@ManyToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "PERSON_AS_MNGR_ID")
private Manager manager;
HTH首先,我认为您应该更改类Person的继承类型
@Inheritance(strategy = InheritanceType.JOINED)
第二个,为班级员工和经理添加id。第一个,我认为您应该更改班级人员的继承类型
@Inheritance(strategy = InheritanceType.JOINED)
第二个,为班级员工和经理添加id。我通过添加:
targetEntity= Manager.class
以及删除:
@JoinColumn(name = "PERSON_ID")
请参阅下面的代码:
import java.io.Serializable;
import java.util.Date;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
@Entity
@Table(name = "MEETING")
public class Meeting implements Serializable{
@Id
@GeneratedValue
@Column(name = "MEETING_ID")
private long id;
@ManyToOne(cascade = CascadeType.ALL, targetEntity= Manager.class)
private Manager manager;
@ManyToOne(cascade = CascadeType.ALL, targetEntity = Employee.class)
private Employee employee;
// additional fields
private boolean activated;
private Date registeredDate;
public Meeting() {
}
public Meeting(Manager manager, Employee employee) {
this.manager = manager;
this.employee = employee;
this.id= Long.parseLong(String.valueOf(manager.getPersonId()).concat(String.valueOf(employee.getPersonId())));
}
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public Manager getDoctor() {
return manager;
}
public void setDoctor(Manager manager) {
this.manager = manager;
}
public Employee getClient() {
return employee;
}
public void setClient(Employee employee) {
this.employee = employee;
}
public boolean isActivated() {
return activated;
}
public void setActivated(boolean activated) {
this.activated = activated;
}
@Column(name = "REGISTERED_DATE")
@Temporal(TemporalType.DATE)
public Date getRegisteredDate() {
return registeredDate;
}
public void setRegisteredDate(Date registeredDate) {
this.registeredDate = registeredDate;
}
}
我通过添加以下内容修复了此问题:
targetEntity= Manager.class
以及删除:
@JoinColumn(name = "PERSON_ID")
请参阅下面的代码:
import java.io.Serializable;
import java.util.Date;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
@Entity
@Table(name = "MEETING")
public class Meeting implements Serializable{
@Id
@GeneratedValue
@Column(name = "MEETING_ID")
private long id;
@ManyToOne(cascade = CascadeType.ALL, targetEntity= Manager.class)
private Manager manager;
@ManyToOne(cascade = CascadeType.ALL, targetEntity = Employee.class)
private Employee employee;
// additional fields
private boolean activated;
private Date registeredDate;
public Meeting() {
}
public Meeting(Manager manager, Employee employee) {
this.manager = manager;
this.employee = employee;
this.id= Long.parseLong(String.valueOf(manager.getPersonId()).concat(String.valueOf(employee.getPersonId())));
}
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public Manager getDoctor() {
return manager;
}
public void setDoctor(Manager manager) {
this.manager = manager;
}
public Employee getClient() {
return employee;
}
public void setClient(Employee employee) {
this.employee = employee;
}
public boolean isActivated() {
return activated;
}
public void setActivated(boolean activated) {
this.activated = activated;
}
@Column(name = "REGISTERED_DATE")
@Temporal(TemporalType.DATE)
public Date getRegisteredDate() {
return registeredDate;
}
public void setRegisteredDate(Date registeredDate) {
this.registeredDate = registeredDate;
}
}
能否显示您的
Meeting.java
实体?能否显示您的Meeting.java
实体?将JoinColumn更改为PERSON\u AS\u MNGR\u ID将导致java.lang.NullPointerException:null,因为它不存在。这两个类的Id Person_IdI在此处复制了您的实体:。这是它应该做的。除非您有另一部分代码没有发布在这里,否则您的NullPointerException问题根本没有意义。据我所知,NPE从未在映射问题中抛出。嗨,对不起,延迟了,这个解决方案没有像预期的那样对我有效,我有:。。。。。原因:java.lang.NullPointerException:null将JoinColumn更改为PERSON_AS_MNGR_ID将导致java.lang.NullPointerException:null,因为它不存在。这两个类的Id Person_IdI在此处复制了您的实体:。这是它应该做的。除非您有另一部分代码没有发布在这里,否则您的NullPointerException问题根本没有意义。据我所知,NPE从未在映射问题中抛出。嗨,对不起,延迟了,这个解决方案没有像预期的那样对我有效,我有:。。。。。由:java.lang.NullPointerException:nullI引起,但我仍然遇到相同的问题,因为两个子类都继承相同的id。在Meting类中,我应该是两个具有不同id的不同类的连接。类别:Metting@ManyToOne(cascade=CascadeType.ALL)@JoinColumn(name=“PERSON\u ID”)私人经理@ManyToOne(cascade=CascadeType.ALL)@JoinColumn(name=“PERSON\u ID”)私人雇员;是的,但我仍然遇到同样的问题,因为两个子类都继承相同的id。在Metting类中,我应该是两个具有不同id的不同类的连接。类别:Metting@ManyToOne(cascade=CascadeType.ALL)@JoinColumn(name=“PERSON\u ID”)私人经理@ManyToOne(cascade=CascadeType.ALL)@JoinColumn(name=“PERSON\u ID”)私人雇员;