簡體   English   中英

Spring JPA-將外鍵映射為主鍵[MySQL]

[英]Spring JPA - mapping foreign keys as a primary key [MySQL]

我在將外鍵映射為主鍵時遇到問題。

我的表是:

client:
PK: id_client

games:
PK: id_game

tickets:
PK: (id_game_fk references game(id_game), id_client_fk references client(id_client))

這是我定義為實體的類:

Client.java:

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;

@Entity
@Table(name = "client")
public class Client {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name = "id_client")
    private int id;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }
}

Games.java:

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;

@Entity
@Table(name = "games")
public class Games {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name = "id_game")
    private int id;

        public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }
}

Ticket.java:

import java.io.Serializable;

import javax.persistence.Column;
import javax.persistence.EmbeddedId;
import javax.persistence.Entity;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;

import Client;
import Games;

@Entity
@Table(name = "tickets")
public class Ticket implements Serializable {
    private static final long serialVersionUID = 3287868602749718327L;

    @EmbeddedId
    private TicketId ticketId;

    @ManyToOne
    @JoinColumn(name = "id_game")
    private Games games;

    @ManyToOne
    @JoinColumn(name = "id_client")
    private Client client;

    public TicketId getId() {
        return ticketId;
    }

    public void setId(TicketId id) {
        this.ticketId = id;
    }

    public Games getGames() {
        return games;
    }

    public void setGames(Games games) {
        this.games = games;
    }

    public Client getClient() {
        return client;
    }

    public void setClient(Client client) {
        this.client = client;
    }
}

TicketId.java:

import java.io.Serializable;

import javax.persistence.Embeddable;

@Embeddable
public class TicketId implements Serializable {
    private static final long serialVersionUID = 6220676431741410239L;

    private int idGameFk;
    private int idClientFk;

    public TicketId(int idGameFk, int idClientFk) {
        this.idGameFk = idGameFk;
        this.idClientFk = idClientFk;
    }

    public int getIdGameFk() {
        return idGameFk;
    }

    public void setIdGameFk(int idGameFk) {
        this.idGameFk = idGameFk;
    }

    public int getIdClientFk() {
        return idClientFk;
    }

    public void setIdClientFk(int idClientFk) {
        this.idClientFk = idClientFk;
    }
}

我已經嘗試了到目前為止找到的所有建議,但是沒有一個有用。 另外,我需要此PK由外鍵組成,因此我確實需要幫助解決問題,如何正確映射它。

您可以使用@MapsId:

@Entity
@Table(name = "tickets")
public class Ticket implements Serializable {
    private static final long serialVersionUID = 3287868602749718327L;

    @EmbeddedId
    private TicketId ticketId;

    @ManyToOne
    @MapsId("idGameFk")
    @JoinColumn(name = "id_game_fk")
    private Games games;

    @ManyToOne
    @MapsId("idClientFk")
    @JoinColumn(name = "id_client_fk")
    private Client client;

    ....
}

此處的更多信息: http : //docs.oracle.com/javaee/6/api/javax/persistence/MapsId.html

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM