2012-05-04 2 views
0

Я осуществивший дб, который состоял из статьи и плодовых таблиц, со следующими характеристиками:Mapping протяженных объектов с несколькими идентификаторов в Hibernate

create table Fruit 
(
ART_ID   bigint, 
FRU_ID   bigint not null auto_increment, 
FRU_FROZEN varchar(15), 
primary key(FRU_ID) 
); 

# Implemented 

create table Article 
(
ART_ID   bigint, 
ART_NAME   varchar(10) not null, 
ART_COST varchar(10) not null, 
primary key(ART_ID) 
); 

альтером стол Фрукты добавить ограничение FK_FRUIT_ARTICLE внешнего ключ (ART_ID) ссылок Статья (ART_ID) по ограничению удаления ограничивает обновление;

и со следующими субъектами класса: Article.java

@Entity  
@Table(name = "Article") 
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS) 
public class Article implements Serializable 
{ 
@Id @GeneratedValue(strategy=GenerationType.AUTO) 
@Basic(optional = false) 
@Column(name = "ART_ID") 
private Long id; 

@Basic(optional = false) 
@Column(name = "ART_NAME") 
private String name; 

@Basic(optional = true) 
@Column(name = "ART_COST") 
private String cost; 

// конструкторы, методы получения и установки

Fruit.java

@Entity 
@Table(name="Fruit") 
public class Fruit extends Article{ 


@Id @GeneratedValue(strategy=GenerationType.IDENTITY) 
@Basic(optional = false) 
@Column(name = "FRU_ID") 
private long fruitID; 

@Basic(optional = false) 
@Column(name = "FRU_FROZEN") 
private String fruitFrozen; 

// конструкторы, методы получения и установки

Теперь моя проблема заключается в том, как иметь ID в Ar ticle и в Fruit, если я сохраню его таким образом, это исключает, что подкласс не должен содержать IDClass, потому что это приведет к нескольким идентификаторам. Любая помощь приветствуется. Заранее спасибо.

ответ

2

Это означает, что он говорит, у Объекта не может быть два идентификатора.

Рассмотрим операцию

entityManager.find(Article.class, 1l); 

Как он должен знать, какой из них, чтобы вернуться, если есть две статьи (статья и фрукты), которые оба имеют идентификатор 1?

Если ваши таблицы должны иметь идентификаторы, наследование объектов не является подходящим решением. Вместо этого рассмотрим размещение общих элементов в @MappedSuperclass.

+0

Если я определяю @MappedSuperClass, это будет означать, что статья абстрактна, и я не хочу, чтобы это произошло. Почему я не могу иметь два идентификатора в одном объекте. Если я объявлю один экземпляр статьи, он получит ID1, и если я объявлю еще один экземпляр Fruit after, он получит ID2 и FRU_ID1. Почему так сложно разобраться? –

+0

Потому что он оставляет findById неопределенным. Если у плода есть два идентификатора, который предполагается использовать для спящего режима, чтобы его найти? – Affe

+0

Ну, а как же это первичный ключ? ART_ID в таблице Fruit - это всего лишь второстепенный ключ, который будет «связывать» свойства статьи с экземпляром Fruit. –

 Смежные вопросы

  • Нет связанных вопросов^_^