Я хотел бы сопоставить простую таблицу excel с моим javaEE-приложением, используя спящий режим. Я действительно новичок в Базах данных и ORM, поэтому мне хотелось бы знать, имеют ли смысл следующие отношения и как много Entities имеют смысл разделить таблицу.
Это атрибуты, содержащиеся в электронной таблице Excel:
(Office Room Number|ComputerName|ComputerIP|Computer OS|UserFirstName|UserLastName)
Связи:
OfficeRoomNumber -- 1: N -- Users
OfficeRoomNumber -- 1: N -- Computer
User -- 1:1 -- Computer
Спасибо за любую помощь и извините за мой ужасный английский.
Вот мои 50c для моделирования вашего домена. Во-первых, можно использовать абстрактный базовый класс для общих аспектов, таких как генерация первичных ключей:
@MappedSuperClass
public abstract class AbstractEntity {
@Id
@Column(name = "id")
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "pk-sequence")
@SequenceGenerator(name = "pk-sequence", sequenceName = "ID_GEN", allocationSize = 1)
protected Long objectID = -1;
@Version
private int version;
public int getVersion() {
return version;
}
public long getObjectID() {
return objectID;
}
}
Обратите внимание, что это можно улучшить, включив другие общие аспекты, например, дату создания/изменения/временные метки.
Затем мы вводим три класса домена/сущности следующим образом:
@Entity
public class OfficeRoom extends AbstractEntity {
private String name;
private String roomNumer;
@ManyToMany // Maybe an employee is associated with 2 or more office places she/he might work at?
private Collection<Employee> staff;
@OneToMany(mappedBy="location")
private Collection<Computer> equipment;
// getters and setters
}
Я добавил комментарий, как вы можете видеть выше на полевых сотрудников. Потенциально, хотелось бы связать два разных офисных помещения с некоторыми VIP-сотрудниками, поэтому вы должны рассмотреть этот случай при моделировании своего домена, используя здесь @ManyToMany
.
Перемещение по:
@Entity
public class Computer extends AbstractEntity {
private String name;
private String model;
private String vendor;
private String installedOS;
private String ipAddress;
@ManyToOne
private OfficeRoom location;
@OneToMany(mappedBy="machine") // Maybe a computer is associated with 2 or more employees?
private Collection<Employee> user;
// getters and setters
}
Снова внимательно рассмотрим мой комментарий. В заключение,...
@Entity
public class Employee extends AbstractEntity {
private String firstName;
private String lastName;
// other staff related attributes here ...
@ManyToOne
private Computer machine;
// getters and setters
}
Хорошо заметьте: используйте только аннотации, исходящие из пакета javax.persistence
, в ваших операторах импорта, чтобы они были совместимы с спецификацией JPA 2.x и оставались нейтральными с JPA-провайдером с вашим приложением.
Надеюсь это поможет.