Wie kann ich den Winterschlaf dazu bringen, eine unidirektionale Kartierung zu machen, ohne den Primärschlüssel zu verweJava

Java-Forum
Anonymous
 Wie kann ich den Winterschlaf dazu bringen, eine unidirektionale Kartierung zu machen, ohne den Primärschlüssel zu verwe

Post by Anonymous »

Wir haben eine Tabellenstruktur wie folgt: < /p>

Code: Select all

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>
Wir wollten die Entitäten wie SO: < /p>
 abbilden@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,
)
}
Aber als wir versucht haben, diese Zuordnungen zu verwenden und Client mit einem neuen Mitglied zu speichern, tritt dieser Fehler auf:

org.hibernate.engine.jdbc.spi.sqlexceptionHelper: Eine untergeordnete Zeile kann nicht hinzufügen oder aktualisieren: Eine fremde Schlüsselbeschränkung schlägt fehl (fehl

Code: Select all

client_member
, Constraint Client_Member_ibfk_1 Fremdstahl (Fremdstadium (

Code: Select all

member_key
) Referenzen Mitglied (

Code: Select all

key
))

Nach dem Debuggen haben wir festgestellt class = "Lang-SQL PrettyPrint-Override">

Code: Select all

INSERT INTO `client_member` (`client_id`, `member_key`) VALUES (14, 183)
< /code>
183
ist die ID des Mitglieds, aber der Schlüssel ist C90BCFD6-86BE-4EC4-8E16-2A541CE87317 . Es scheint, dass Hibernate den ReferenzColumnName ignoriert und immer noch versucht, die ID anstelle des Schlüssels des Mitglieds zu übergeben.
Gibt es eine Möglichkeit, dies zu beheben, ohne dem Mitglied Entität eine Zuordnung von Clients hinzufügen zu müssen? Wir möchten es nach Möglichkeit unidirektional halten

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post