У меня есть таблица в базе данных, которая имеет следующую структуру (данные):
+--------------------------+
Organization
+--------------------------+
org_id | name
---------------------------
1 | IBM
---------------------------
2 | Google
---------------------------
3 | Yahoo
+--------------------------+
В приведенной выше таблице org_id является первичным ключом.Я хочу вставить новую строку в этой таблице, только новое имя организации найдено.
Другие таблицы, которые должны использовать эту таблицу, следующие:
+--------------------------+
Project
+--------------------------+
project_id| description
---------------------------
1 | foo
---------------------------
2 | bar...
---------------------------
3 | xyz
+--------------------------+
и таблица, которая связывает проектТаблица организации выглядит следующим образом:
+--------------------------+
Project_Client
+--------------------------+
pc_id | project_id | org_id
---------------------------
1 | 1 | 1
---------------------------
2 | 1 | 3
---------------------------
3 | 2 | 2
+--------------------------+
Я хочу реализовать что-то подобное, используя hibernate:
Каждый проект имеет свое описание и список имен клиентов.Имя клиента - это не что иное, как название организации.Чтобы избежать дублирования данных, я создал таблицу с именем Organization
.
При вставке информации о проекте в базу данных, если какое-либо имя клиента уже существует в таблице Organization
, тогда org_id
этого имени клиента следует использовать при вставке строки в таблицу Project_Client
.Если имя клиента отсутствует в таблице Organization
, то в таблицу Organization
должна быть добавлена новая строка, а затем в таблице Project_Client
должна использоваться соответствующая org_id
.
Можем ли мы реализовать что-то подобное, используяhibernate?
EDIT # 1
Ранее у меня были следующие классы:
class Project {
int projectID;
String description;
set<String> clients;
set<String> employers;
set<String> technologies;
}
Как видите, у каждого проекта будет один илибольше клиентов, работодателей и технологий.Я хочу избежать дублирования названия организации и технологии в нескольких проектах.Например, если для какого-либо проекта клиентом является XYZ, а для другого проекта также клиентом является XYZ, то я просто хочу сослаться на ту же таблицу org_id
в organization
вместо создания отдельных строк для одной организации.
IЯ надеялся, что Hibernate позволит мне достичь этого легко, но я не смог достичь этого с помощью или с и.Поэтому я изменил свою структуру классов следующим образом:
class Entity {
int id;
String name;
}
class Client extends Entity {
// nothing special here
}
class Employer extends Entity {
// nothing special here
}
class Technology extends Entity {
// nothing special here
}
class Project {
int projectID;
List<Client> clients;
List<Employer> employers;
List<Technology> technologies;
}
Я создал отдельные файлы сопоставления для классов Client
, Employer
и Technology
.Даже это также не помогло мне.