является идентификатором члена, но ключ-C90BCFD6-86BE-4EC4-8E16-2A541CE87317 . Похоже, что Hibernate игнорирует ссылочное количество имени и все еще пытается пройти в ID вместо ключа члена .
< P> Есть ли способ исправить это без необходимости добавления картирования клиентов в объект , делающую это двунаправленное? Мы хотели бы сохранить его однонаправленным, если это возможно,
У нас есть структура таблицы, как это: < /p> [code]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, )
@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, ) } [/code] Но когда мы пытались использовать эти сопоставления и сохранить клиент с новым членом , возникает эта ошибка:
орг.bhibernate.engine.jdbc.spi.sqlexceptionHelper: не удается добавить или обновить строку ребенка: ограничение иностранного ключа не удается ([code]client_member[/code], ограничение client_member_ibfk_1 Иностранный ключ ([code]member_key[/code]) ссылки член ([code]key[/code]))
После отладки мы обнаружили, что это то, что Hibernate пытался выполнить: [code]INSERT INTO `client_member` (`client_id`, `member_key`) VALUES (14, 183) < /code> 183[/code] является идентификатором члена, но ключ-C90BCFD6-86BE-4EC4-8E16-2A541CE87317 . Похоже, что Hibernate игнорирует ссылочное количество имени и все еще пытается пройти в ID вместо ключа члена . < P> Есть ли способ исправить это без необходимости добавления картирования клиентов в объект , делающую это двунаправленное? Мы хотели бы сохранить его однонаправленным, если это возможно,
У нас есть структура таблицы, как это:
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,...
У нас есть структура таблицы, как это:
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,...
У меня есть две таблицы.
Person: id, name
Email: id, email_address, person_id
Здесь «person_id» — это внешний ключ, который ссылается на идентификатор в таблице person.
Учитывайте, что у каждого человека будет только один адрес электронной почты, и...
У меня есть две таблицы.
Person: id, name
Email: id, email_address, person_id
Здесь «person_id» — это внешний ключ, который ссылается на идентификатор в таблице person.
Учитывайте, что у каждого человека будет только один адрес электронной почты, и...
У меня есть две таблицы.
Student: id, name
Email: id, email_address, student_id
Здесь «student_id» — это внешний ключ, который ссылается на идентификатор в таблице person.
Учитывайте, что у каждого учащегося будет только один адрес электронной...