#java #mysql #jpa #jpa-2.1
#java #mysql #jpa #jpa-2.1
Вопрос:
Я пытался создать сущность JPA, используя схему базы данных образца Mysql, JPA-инструменты Eclipse JPA entites генерируются с использованием i am для установления связи сущностей для приведенных ниже сценариев и таблиц
-
Таблица Employee: в таблицах Employee есть поля reportsto, которые ссылаются на employee, т.е. Один сотрудник отчитывается перед другим сотрудником
-
Таблица Office: в одном офисе может быть более одного сотрудника
Ниже приведены сущности JPA :
@Entity
@Table(name="employees")
@NamedQuery(name="Employee.findAll", query="SELECT e FROM Employee e")
public class Employee implements Serializable {
private static final long serialVersionUID = 1L;
private String email;
private String extension;
private String firstName;
private String jobTitle;
private String lastName;
//bi-directional one-to-one association to Customer
@OneToOne(mappedBy="employee")
private Customer customer;
//bi-directional many-to-one association to Office
@ManyToOne
@JoinColumn(name="officeCode", referencedColumnName="officeCode")
private Office office;
//bi-directional many-to-one association to Employee
@ManyToOne
@JoinColumn(name="reportsTo", referencedColumnName="employeeNumber")
private Employee employee;
//bi-directional many-to-one association to Employee
@OneToMany(mappedBy="employee")
private List<Employee> employees;
}
Описание таблицы
CREATE TABLE `employees` (
`employeeNumber` int(11) NOT NULL,
`lastName` varchar(50) NOT NULL,
`firstName` varchar(50) NOT NULL,
`extension` varchar(10) NOT NULL,
`email` varchar(100) NOT NULL,
`officeCode` varchar(10) NOT NULL,
`reportsTo` int(11) DEFAULT NULL,
`jobTitle` varchar(50) NOT NULL,
PRIMARY KEY (`employeeNumber`),
KEY `reportsTo` (`reportsTo`),
KEY `officeCode` (`officeCode`),
CONSTRAINT `employees_ibfk_1` FOREIGN KEY (`reportsTo`) REFERENCES `employees` (`employeeNumber`),
CONSTRAINT `employees_ibfk_2` FOREIGN KEY (`officeCode`) REFERENCES `offices` (`officeCode`)
)
При загрузке приложения мы получаем сообщение об ошибке ниже
referencedColumnNames(employeeNumber) of com.train.model.Employee.employee referencing com.train.model.Employee not mapped to a single property
когда я добавляю поле employeeNumber и генерирую геттеры и сеттеры, я получаю сообщение об ошибке ниже
referencedColumnNames(officeCode) of com.train.model.Employee.office referencing com.train.model.Office not mapped to a single property
Сущность Office JPA
@Entity
@Table(name="offices")
@NamedQuery(name="Office.findAll", query="SELECT o FROM Office o")
public class Office implements Serializable {
private static final long serialVersionUID = 1L;
private String addressLine1;
private String addressLine2;
private String city;
private String country;
private String phone;
private String postalCode;
private String state;
private String territory;
//bi-directional many-to-one association to Employee
@OneToMany(mappedBy="office")
private List<Employee> employees;
}
Table Description
CREATE TABLE `offices` (
`officeCode` varchar(10) NOT NULL,
`city` varchar(50) NOT NULL,
`phone` varchar(50) NOT NULL,
`addressLine1` varchar(50) NOT NULL,
`addressLine2` varchar(50) DEFAULT NULL,
`state` varchar(50) DEFAULT NULL,
`country` varchar(50) NOT NULL,
`postalCode` varchar(15) NOT NULL,
`territory` varchar(10) NOT NULL,
PRIMARY KEY (`officeCode`)
)
Почему объект employee жалуется на отсутствие officeCode и какая правильная сущность для Employee и Office
Комментарии:
1. Вам действительно нужно использовать сопоставления сущностей, я обнаружил, что ночью я сплю намного лучше, когда ссылаюсь на другие связанные сущности по id:Long
2. не могли бы вы привести пример