2016-08-26 16 views
0

プライマリキーとして外部キーをマッピングする際に問題があります。Spring JPA - 外部キーをプライマリキーとしてマッピングする[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を外部キーで構成する必要があるので、解決するためには本当に助けが必要です。どのように正しくマップする必要がありますか?

答えて

1

あなたは@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; 

    .... 
} 
ここ

さらに詳しい情報:/ Dが、チケットを呼び出すときに、今、私は次の例外を取得しています:http://docs.oracle.com/javaee/6/api/javax/persistence/MapsId.html

+0

、[OK]を、少なくともそれが今コンパイルcom.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:未知の列 'ticket0_.client_id_client' in 'field list' – Anton

+0

編集済みの回答、追加したものを試すことができますか? –

+0

はい、既に行いましたが、私には同じエラーが表示されます。 – Anton

関連する問題