我知道这是旧的,但仍然有效。我遇到了同样的问题。但是,@MappedSuperClass 与 Single 继承表不同。MappedSuperClass 将为每个子类创建单独的表(据我了解)
我不确定为什么,但是当我只有一个继承类时,我没有问题。但是,一旦我添加了第二个和第三个,我就会收到同样的错误。当我在子表中指定 @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))
我仍然必须设置所有测试,但到目前为止看起来不错(我担心如果我等到完成所有测试后我会忘记发布这个)