Я пытаюсь сгенерировать сущности JPA из существующей базы данных, имеющей «интересный» дизайн.
База данных имеет таблицу с именем UserSet, которая может иметь ссылки на несколько других UserSet. Между UserSets и LinkedUserSets существует отношение один ко многим. LinkedUserSets также имеет непосредственное отношение к UserSets.
Я попытался создать сущность JPA из структуры базы данных, используя Dali JPA Tools. Результирующий объект Linkeduserset пропускает аннотацию @Id или @EmbeddedId и, таким образом, не компилируется. Поскольку получающаяся сущность содержит только два @JoinColumns (которые не могут быть помечены как @Id), я пока не нашел способ обойти эту проблему.
Структура базы данных не может быть изменена никаким образом.
Есть ли способ как-то преодолеть это?
Соответствующие элементы операторов создания таблицы:
CREATE TABLE `LinkedUserSets` (
`UsrSetID` INT(11) NOT NULL DEFAULT '0' ,
`ChildID` INT(11) NOT NULL DEFAULT '0' ,
CONSTRAINT `fk_LinkedUserSets_UserSet1`
FOREIGN KEY (`UsrSetID` )
REFERENCES `UserSet` (`UsrSetID` ));
CREATE TABLE `UserSet` (
`UsrSetID` INT(11) NOT NULL AUTO_INCREMENT ,
PRIMARY KEY (`UsrSetID`),
CONSTRAINT `fk_UserSet_LinkedUserSets1`
FOREIGN KEY (`UsrSetID` )
REFERENCES `LinkedUserSets` (`ChildID` ));
Сгенерированные объекты:
@Entity
@Table(name="linkedusersets")
public class Linkeduserset {
//bi-directional many-to-one association to Userset
@ManyToOne
@JoinColumn(name="UsrSetID")
private Userset userset1;
//bi-directional one-to-one association to Userset
@OneToOne
@JoinColumn(name="ChildID")
private Userset userset2;
}
@Entity
@Table(name="userset")
public class Userset {
private static final long serialVersionUID = 1L;
@Id
@Column(name="UsrSetID")
private int jngSetID;
//bi-directional many-to-one association to Linkeduserset
@OneToMany(mappedBy="userset1")
private Set<Linkeduserset> linkedusersets;
//bi-directional one-to-one association to Linkeduserset
@OneToOne(mappedBy="userset2")
private Linkeduserset linkeduserset;
}
Сообщение об ошибке:
Entity "Linkeduserset" has no Id or EmbeddedId