Код: Выделить всё
CREATE TABLE `client` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`name` VARCHAR(255) NOT NULL,
PRIMARY KEY (`id`)
);
CREATE TABLE `member` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`key` varchar(255) NOT NULL,
`name` VARCHAR(255) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY (`key`)
);
CREATE TABLE `client_member` (
`client_id` bigint NOT NULL,
`member_key` varchar(255),
UNIQUE KEY `client_id` (`client_id`,`user_key`),
FOREIGN KEY (`client_id`) REFERENCES `client` (`id`),
FOREIGN KEY (`member_key`) REFERENCES `member` (`key`)
);
< /code>
Мы хотели отобразить такие объекты, как SO: < /p>
@Entity
@Table(name = "client")
class Client(
@Id
@Access(AccessType.PROPERTY)
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id", unique = true, nullable = false, updatable = false)
var id: Long?,
@Column(name = "name", nullable = false)
var name: String,
@ManyToMany
@JoinTable(
name = "client_member",
joinColumns = [JoinColumn(
name = "client_id",
referencedColumnName = "id",
nullable = false
)],
inverseJoinColumns = [JoinColumn(
name = "member_key",
referencedColumnName = "key",
nullable = false
)]
)
var clientMembers: MutableSet,
)
@Entity
@Table(name = "member")
class Member(
@Id
@Access(AccessType.PROPERTY)
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id", unique = true, nullable = false, updatable = false)
var id: Long?,
@NaturalId
@Column(name = "key", unique = true, nullable = false, updatable = false)
var key: String,
@Column(name = "name", nullable = false)
var name: String,
)
@Entity
@Table(name = "client_member")
class ClientMember(
@EmbeddedId
var id: ClientMemberCompositeKey
) {
@Embeddable
class ClientMemberCompositeKey(
@ManyToOne
@JoinColumn(
name = "client_id",
referencedColumnName = "id",
nullable = false
)
var client: Client,
@ManyToOne
@JoinColumn(
name = "member_key",
referencedColumnName = "key",
nullable = false
)
var member: Member,
)
}
орг.bhibernate.engine.jdbc.spi.sqlexceptionHelper: не удается добавить или обновить строку ребенка: ограничение иностранного ключа не удается (
Код: Выделить всё
client_memberКод: Выделить всё
member_keyКод: Выделить всё
keyПосле отладки мы обнаружили, что это то, что Hibernate пытался выполнить:
Код: Выделить всё
INSERT INTO `client_member` (`client_id`, `member_key`) VALUES (14, 183)
< /code>
183< P> Есть ли способ исправить это без необходимости добавления картирования клиентов в объект , делающую это двунаправленное? Мы хотели бы сохранить его однонаправленным, если это возможно,
Подробнее здесь: https://stackoverflow.com/questions/794 ... ut-using-t