@ScRsa
Delphi/Oracle Изучаю JAVA

Как правильно определить Entity если часть данных хранится в таблице свойств?

Имеется сущность часть данных которой храниться в обычной таблице, а другая в таблице свойств (PK - Attribute_Name - Attribute_Value). Набор свойств может различаться для разных типов этой сущности.

@Entity
@Table(name = "PEOPLE")
public class People {
	@Id	
	private int codePeople;
 
	@Column(name = "FAM")
	private String fam;
 
	@Column(name = "IM")
	private String im;
 
	@Column(name = "OTCH")
	private String otch;

	...
}

// Свойства
@Table(name = "PEOPLE_ATTRIBUTE")
@Column(name = "Code_People")
@Column(name = "Code_Attr")
@Column(name = "Value_Attr")

// Cобственно: В зависимости от региона адрес человека хранится в разных видах
// 1 - Полное название (Регион, Город, Улица, Дом...)
// 2 - Региональные Код региона Код улицы Дом (то есть несколько строк в таблице свойств)
// 3 - Код КЛАДР
// 4 - Код ФИАС
// И таких различных атрибутов около сотни


Вопрос в том, как на основе этой структуры построить Entity?

Смотрю в сторону @SecondaryTable, но, по-моему, это не оно.
  • Вопрос задан
  • 304 просмотра
Решения вопроса 1
@sirs
Как один из вариантов - можно сделать с аннотацией @OneToMany. Создать отдельное entity на таблицу PEOPLE_ATTRIBUTE, например

@Entity
@Table(name = "PEOPLE_ATTRIBUTE")
public class PeopleAttribute {
private int peopleCode;
private int attributeCode;
private String attributeValue;
...
}

@Entity
@Table(name = "PEOPLE")
public class People {

...
private Set<PeopleAttribute> attributes;

@OneToMany(mappedBy = "attribute")
public Set<PeopleAttribute> getAttributes() {
		return this.attributes;
	}
...
}


P.S. Небольшой совет из опыта: 1) всегда используйте Long для id сущностей, даже если вам кажется что short/int вам хватает, накладные расходы не такие уже и большие, не стоит экономить на спичках. 2) Если у вас @Id private int codePeople; является ID, то и называйте его peopleId, peopleID или просто id. Когда сущностей набирается много - начинается путаница и проблемы, особенно если в команде людей много и все пишут по разному.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы