我有两个实体User
和Partner
,Partner
实体扩展了User
。
我正在使用单表策略,所以在数据库中User
是唯一要创建的表。
我有另一个Doc
实体,此实体与ManyToOne
实体有Partner
关系。
所以我想在午餐时我的应用程序在数据库User
和Doc
中创建两个表,表Doc
将有一个外键引用{{{ 1}}表,但它没有这样做,相反它只创建一个列但没有引用键。
文档
User
Partenaire
@Entity
public class Doc implements Serializable {
@Id
@GeneratedValue(strategy= GenerationType.IDENTITY)
private Long id;
private String name;
private String path;
@Column(name="CREATION_TS", columnDefinition="TIMESTAMP DEFAULT CURRENT_TIMESTAMP", insertable=false, updatable=false)
private Calendar dateUploaded;
@ManyToOne
private Partenaire partenaire;
public Doc(Document type, String name, String path, Calendar dateUploaded) {
this.type = type;
this.name = name;
this.path = path;
this.dateUploaded = dateUploaded;
}
//setters/getters
@JsonIgnore
@XmlTransient
public Partenaire getPartenaire() {
return partenaire;
}
@JsonSetter
public void setPartenaire(Partenaire partenaire) {
this.partenaire = partenaire;
}
}
用户
@Entity
@DiscriminatorValue("UP")
@XmlType(name = "UP")
public class Partenaire extends User implements Serializable {
//properties
@OneToMany(mappedBy="partenaire")
private Collection<Doc> docs;
public Collection<Doc> getDocs() {
return docs;
}
public void setDocs(Collection<Doc> docs) {
this.docs = docs;
}
}
我该如何解决这个问题?
这是我的表结构:
@Entity
@Table(name="users")
@Inheritance(strategy=InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name="TYPE_USER",discriminatorType=DiscriminatorType.STRING,length=2)
@XmlSeeAlso({Candidat.class, Partenaire.class})
public class User implements Serializable {
@Id
private String username;
//properties ...
}
答案 0 :(得分:0)
由于创建了一个sepparate partenaire-class并将其注释为@Entity,它将创建一个新表“Partenaire”,除非您将该表分别命名。我认为这不是你的意图,因为你已经有一个表“User”。 我想你要做的是将你的用户称为“Doc”类的一部分:
@ManyToOne
private User partenaire;
和(在用户级中):
@OneToMany(mappedBy="partenaire")
private Collection<Doc> docs;
如果您在控制器中正确实现了这一点,我认为您的问题将会得到解决。 当然,除非有另一个理由为partenaire制作一个sepparate类?