これは宿題であり、理解できないので、助けていただければ幸いです。このシステムは、オリンピックのメダル集計シミュレータです。
Events テーブルと Country テーブルがあります。
statement.execute("create table EVENTS (EVENTNUMBER integer primary key not null, EVENTNAME varchar(32), " +
" GENDER varchar(5), GOLD integer, SILVER integer, BRONZE integer)");
statement.execute("create table COUNTRIES (COUNTRYID integer primary key not null, NAME varchar(32)," +
"TOTALGOLD integer, TOTALSILVER integer, TOTALBRONZE integer)");
これらはエンティティに関連しています:
@Entity
@Table(name = "COUNTRIES")
public class Country implements Serializable
{
@Id
private int countryID; // This is the primary key
private String name;
private int totalGold;
private int totalSilver;
private int totalBronze;
//getters, setters omitted
@Entity
@Table(name = "EVENTS")
public class Event implements Serializable
{
@Id
private int eventNumber; // This is the primary key
private String eventName;
private String gender; // Men, Women or Mixed
@ManyToOne(optional=false)
@JoinColumn(name="COUNTRYID", nullable=false, updatable=false)
private Country gold, silver, bronze;
//getter, setter methods omitted
この質問では、3 つの Country インスタンス変数を Event に追加して、金、銀、銅の勝者を表し、関係タイプを含めるように指示しています。私にとって、多対一であることは理にかなっています。しかし、これを実行しようとすると、結合が間違っているというエラーが表示されます。これは、1 つの書き込みのみを許可し、残りを読み取り専用として許可する必要があるためです。
そのため、JoinColumn を insertable=false に変更し、エラーが発生しました: 列 'COUNTRYID' は、FROM リストのどのテーブルにもないか、結合仕様内にあり、結合仕様の範囲外にあるか、HAVING 句に表示されますGROUP BY リストにありません。
私のQueriesBeanのこのメソッドでヒットしたのはどれですか:
public List<Event> getEvents()
{
List<Event> eventList = null;
Query query = em.createQuery("SELECT e FROM Event e");
eventList = (List<Event>) query.getResultList();
return eventList;
}
おそらく誰かが私にいくつかのガイダンスを与えることができますか?