У меня есть класс Hibernate под названием Expression (здесь он упрощен для вашего удобства просмотра):
@Entity
public class Expression {
@Id
@GeneratedValue
private long id;
private String data;
@OneToMany(fetch=FetchType.EAGER)
@Cascade({CascadeType.MERGE, CascadeType.PERSIST})
private Set<Expression> dependencies;
}
Это создает две таблицы, Expression(id, data)
и Expression_Expression(expression_id, dependencies_id)
. Однако Hibernate устанавливает оба столбца expression_id и dependencies_id в качестве первичного ключа, поэтому у меня не может быть повторяющегося идентификатора dependencies_id, чего я и хотел бы.
Например, если у меня есть три выражения:
Expression x = new Expression("0");
Expression y = new Expression("1");
Expression z = new Expression("x + y");
Set<Expression> tmp = new HashSet<Expression>();
tmp.add(x);
tmp.add(y);
z.setDependencies(tmp);
// Persist x, y, and z.
, тогда Hibernate выполнит следующее:
Вставьте x
в таблицу Expression
с id = 1 и данными = "0"
Вставьте y
в таблицу Expression
с id = 2 и данными = "1"
Вставьте z
в таблицу Expression
с id = 3 и данными = "a + b"
Вставьте строку в таблицу 'Expression_Expression' с expression_id = 3 и dependencies_id = 1. (Делая z
зависимым от x
.)
Но когда он пытается вставить строку в таблицу Expression_Expression
с expression_id = 3 и dependencies_id = 2 (превращая z
в зависимую от y
), я получаю ошибку повторяющейся записи.
Я бы хотел иметь несколько строк в таблице Expression_Expression
с одним и тем же значением expression_id
.
Любая помощь будет принята с благодарностью!