У меня есть отображение многих связей, и я не могу заставить его работать.Я прочитал много постов и статей и не мог понять это.Если у кого-то есть идеи, пожалуйста, поделитесь.
Я постарался максимально упростить диаграмму и код.
Моя база данных разработана так:
Мои сущности выглядят так (по крайней мере, последняя попытка, прежде чем спросить): Клиент:
@Entity
@Table(name = "client")
public class Client implements Serializable {
@Id
@Column(name = "client_id")
private int id;
... other fields
}
Проект:
@Entity
@Table(name = "project")
public class Project implements Serializable {
@EmbeddedId
private ProjectId id;
... other fields
@Embeddable
class ProjectId implements Serializable {
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "client_id", insertable = false, updatable = false)
private Client client;
@Column(name = "project_id")
private int projectId;
}
}
Пользователь:
@Entity
@Table(name = "user")
public class User implements Serializable {
@EmbeddedId
private UserId id;
... other fields
@Embeddable
class UserId implements Serializable {
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "client_id", insertable = false, updatable = false)
private Client client;
@Column(name = "user_id")
private int userId;
}
}
ProjectUser:
@Entity
@Table(name = "project_user")
public class ProjectUser implements Serializable {
@EmbeddedId
private ProjectUserId id;
... other fields
@Embeddable
class ProjectUserId implements Serializable {
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "client_id", insertable = false, updatable = false)
private Client client;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumns({
@JoinColumn(name = "client_id", referencedColumnName = "client_id", insertable = false, updatable = false),
@JoinColumn(name = "project_id", referencedColumnName = "project_id", insertable = false, updatable = false) })
private Project project;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumns({
@JoinColumn(name = "client_id", referencedColumnName = "client_id", insertable = false, updatable = false),
@JoinColumn(name = "user_id", referencedColumnName = "user_id", insertable = false, updatable = false) })
private User user;
}
}
Перед добавлением сущности ProjectUser все работает нормально.Теперь, когда я запускаю сервер, он говорит:
Повторяющийся столбец в сопоставлении для сущности: Столбец ProjectUser: client_id (должен отображаться с помощью insert = \ "false \" update = \ "false \") "}}
Итак, вопрос в том, как мне сделать эту работу?
РЕДАКТИРОВАТЬ: Java-приложение будет в основном REST-сервисами, предоставляющими данные. Проектирование базы данных такое, как есть. Оно имеет логический смысл и большая часть бизнес-логики будетв базе данных. У нас есть люди с очень хорошими знаниями БД, и не имеет смысла менять дизайн базы данных из-за ограничений JPA / Hibernate.