2017-03-24 10 views
0

私は冬眠するのが初めてです。私はJPA Hibernateで春のブートでアプリケーションを設計しています。休止状態のエンティティ定義

ように私は、データベース・スキーマを持っている:私は、スキーマが明らかであると思い

CREATE TABLE IF NOT EXISTS `offers` (
`id` int(11) NOT NULL, 
    `detail` varchar(255) NOT NULL 
`status` varchar(255) NOT NULL 
) ENGINE=InnoDB DEFAULT CHARSET=latin1; 

CREATE TABLE `restaurants` (
`id` int(11) NOT NULL AUTO_INCREMENT, 
`name` varchar(255) NOT NULL, 
`status` varchar(255) NOT NULL 
PRIMARY KEY (`id`) 
) ENGINE=InnoDB DEFAULT CHARSET=latin1 

CREATE TABLE `rest_offer_map` (
`id` int(11) NOT NULL, 
`rest_id` int(11) NOT NULL, 
`offer_id` int(11) NOT NULL 
`status` varchar(255) NOT NULL 
) ENGINE=InnoDB DEFAULT CHARSET=latin1 

。今は、レストランが提供されていない場合があります。左結合を達成できるようにエンティティを作成するにはどうすればいいですか? また、すべてのテーブルにstatusという名前の列がありますので注意してください(特に左結合の場合は状態が結合条件になります)

o/p私はすべてのレストランのリストですオファー(任意のもの)で、左結合が必要です。

答えて

2

あなたは

@Entity 
@Table(name="restaurants") 
public class Restaurant implements Serializable{ 
@Id 
@Column(name="id") 
private Long id; 
@ManyToMany 
@JoinTable(name="rest_offer_map",[email protected](name="rest_id", referencedColumnName="id"),    [email protected](name="offer_id",referencedColumnName="id")) 
private Collection<Offer> offers; 
     ..... 

} 

以下のような関係の所有側としてレストランのエンティティを作成する必要があり、

@Entity 
@Table(name"offers") 
public class Offer implements Serializable{ 
    @Id 
    @Column(name="id") 
    private Long id; 
    ManyToMany(mappedBy="offers") 
    private Collection<Restaurant> restaurants; 
...... 
} 
+0

referencedColumnNameと以下のようにオファーエンティティは、テーブルのレストランからかrest_order_mappingから来ましたの? –

+1

** referencedColumnName **は**レストラン**と**オファー**テーブルです** rest_order_mapping **テーブルはジョインテーブルで、レストランへの参照** foreign_keys **を保持し、テーブルを提供します.Hence ** id **レストラン**テーブルの**カラムと** id **テーブル**の**カラム**テーブルは** rest_order_mapping **テーブルに対する 'referencedColumnName'です。 –

+0

100回答が好きです。 !! CHEERS ..... !!もう一つ質問です。 ManyToMany(mappedBy = "offers")を追加するとき プライベートコレクションレストラン;これは、私が残りのオブジェクトを取得しているときに無限ループを与えています。オファーオブジェクトはレストオブジェクト内にあり、レストオブジェクトはオファーの中にあります。何が足りないのですか –