これは古くても有効ですが、私は知っています。私は同じ問題に遭遇した。ただし、@MappedSuperClassは単一の継承テーブルと同じではありません。 MappedSuperClassは、(私が理解するように)サブクラスごとに別々のテーブルを作成します。
私は正確な理由はわかりませんが、継承されたクラスが1つしかないときは問題はありませんでした。しかし、私は2番目と3番目を追加した後、私は同じエラーが発生しました。私が@Idアノテーションを子テーブルに指定したとき、それは再び働き始めました。
私のレイアウトは簡単でしたが、企業、代理店、クライアントの連絡先情報は簡単でした。
親表:
...
@Entity
@Inheritance(strategy= InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name="USER_TYPE", length=10, discriminatorType= DiscriminatorType.STRING)
@Table(name="CONTACTS")
public abstract class AbstractContact implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
protected Long id;
@Column (length=10, nullable=false)
protected String mapType;
@Column (length=120, nullable=false)
protected String mapValue;
...
エージェントコンタクト
@Entity
@DiscriminatorValue("Agent")
public class AgentContact extends AbstractContact implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
protected Long id;
@ManyToOne(fetch=FetchType.LAZY)
@JoinColumn(name="USER_ID")
protected Agents agent;
}
会社連絡先:
@Entity
@DiscriminatorValue("Company")
public class CompanyContact extends AbstractContact implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
protected Long id;
@ManyToOne(fetch=FetchType.LAZY)
@JoinColumn(name="USER_ID")
protected Companies company;
}
クライアントコンタクト:
@Entity
@DiscriminatorValue("Client")
public class ClientContact extends AbstractContact implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
protected Long id;
//Client table not built yet so... no mapping
}
クライアントテーブルはまだ構築されていないので、マッピング情報はありませんが、その点が分かります。
私はMySQLの説明を共有したいと思いますが、Windowsのコマンドプロンプトはカット/コピー/ペーストするにはあまりにも無駄です!本質的には、その: ID(int型PRI) USER_TYPE(VARCHAR(10)) USER_ID(INT) MAPTYPE(VARCHAR(10)) MAPVALUE私はまだセットアップにすべてを持っている
(VARCHAR(120))テストは行っていますが、これまでのところよく見えます(私はすべてのテストをした後に私がこれを忘れることを覚えています)
私にも同様の問題があります。 Eclipseと結びついていると思います。私のJBoss開発ツールは、派生したエンティティの欠落している@Idについて苦情を言いますが、Mavenはそれをコンパイルして不平を言っていません。 – Mats