Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/356.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Hibernate/@ElementCollection和@XmlRootElement_Java_Postgresql_Hibernate_Jpa_Jakarta Ee - Fatal编程技术网

Java Hibernate/@ElementCollection和@XmlRootElement

Java Hibernate/@ElementCollection和@XmlRootElement,java,postgresql,hibernate,jpa,jakarta-ee,Java,Postgresql,Hibernate,Jpa,Jakarta Ee,我正在与Hibernate搏斗,找不到一个可行的解决方案来做我想做的事情。顺便说一句,这是一个网络服务 简要说明: 我有一个对象组件列表,它必须嵌入到主对象项目中。我想在我的数据库PostgreSQL中持久化这两者。为此,我将其设置如下: 我的第一个表名为T_PROJET 它包含标记为PRJ_名称的id 我在ComponentList上苦苦挣扎的列表 以及到期日PRJ_日期 对于较小的对象,表名为T_COMPOSANT。 已获取自动生成的id:COMP_id。 公司名称 价值补偿 和优先权比较重

我正在与Hibernate搏斗,找不到一个可行的解决方案来做我想做的事情。顺便说一句,这是一个网络服务

简要说明: 我有一个对象组件列表,它必须嵌入到主对象项目中。我想在我的数据库PostgreSQL中持久化这两者。为此,我将其设置如下:

我的第一个表名为T_PROJET 它包含标记为PRJ_名称的id 我在ComponentList上苦苦挣扎的列表 以及到期日PRJ_日期

对于较小的对象,表名为T_COMPOSANT。 已获取自动生成的id:COMP_id。 公司名称 价值补偿 和优先权比较重要

在我的HMI上,我可以用至少一个组件创建Projet,但我可以为Projet添加最多5个组件,并且这些组件将保存为列表

以下是我倾向于在HMI上生成的JSON示例:

{
"name":"Example",
"dateLimite":"2018-08-08",
"composant_1": {
    "name":"Vol",
    "montant": 1200,
    "importance":1
},
"composant_2": {
    "name":"Truc",
    "montant": 1200,
    "importance":1
},
"composant_3": {
    "name":"Bidule",
    "montant": 1200,
    "importance":1
},
"composant_4": {
    "name":"Machin",
    "montant": 1200,
    "importance":1
},
"composant_5": {
    "name":"Wesh",
    "montant": 1200,
    "importance":1
}
}
以下是主要的对象项目:

@Entity
@Table(name = "T_PROJET")
@XmlRootElement
public class Projet implements Serializable{

private static final long serialVersionUID = 1L;

private String name;
private List<Composant> composants;
private Date dateLimite;

public Projet() {
    super();
}

public Projet(String name, List <Composant> composants, Date dateLimite) {
    this.name = name;
    this.composants = composants;
    this.dateLimite = dateLimite;
}

@Id
@Column(name = "PRJ_NOM", nullable = false)
public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}

@ElementCollection
@CollectionTable(name="T_COMPOSANT", joinColumns = @JoinColumn(name = "COMP_ID"))
@Embedded
@Column(name="COMP_ID", nullable = true)
public List<Composant> getComposants() {
    return composants;
}

public void setComposants(List <Composant> composants) {
    this.composants = composants;
}

@Column(name="PRJ_DATE")
public Date getDateLimite() {
    return dateLimite;
}

public void setDateLimite(Date dateLimite) {
    this.dateLimite = dateLimite;
}
}
每次尝试时,在继承状态层次结构错误中都找不到声明类。 我肯定我错过了关于@ElementCollection和@Embeddeble注解的一些内容,但我无法确定安东尼奥·冈卡尔维斯(Antonio Goncalves)的书到底读到了哪里,但没有答案,或者我就是无法正确阅读。 你知道我应该找什么吗

谢谢你的帮助

@ElementCollection/@CollectionTable可能与@Embedded/@列冲突

@Embedded定义了一个嵌入式对象,其中@ElementCollection定义了一个嵌入式对象列表

@Column定义一个列,其中@CollectionTable定义集合的联接

如果您不需要组件作为一个实体:

从getComposants中删除@Embedded和@Column 从组件中删除@Table它已在@CollectionTable中声明 如果您需要组件作为一个实体:

从ProjetGetComponents中删除@ElementCollection、@CollectionTable、@Embedded和@Column 从组件上移除@embedable 将@Entity添加到组件 将注释添加到getComposants。 -


谢谢你的回答!它与第二种解决方案配合得很好。
@Embeddable
@Table(name = "T_COMPOSANT")
@XmlRootElement
public class Composant implements Serializable {
private static final long serialVersionUID = 1L;
private int composant_id;
private String name;

private int montant;

private int importance;

public Composant(){
    super();
}

public Composant(final int composant_id, final String name, final int montant, final int importance) {
    this.composant_id = composant_id;
    this.name = name;
    this.montant = montant;
    this.importance = importance;
}

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "COMP_ID")
public int getComposant_id() {
    return composant_id;
}

public void setComposant_id(int composant_id) {
    this.composant_id = composant_id;
}



@Column(name = "COMP_NOM",nullable = true)
public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}

@Column(name="COMP_MONTANT", nullable = true)
public int getMontant() {
    return montant;
}

public void setMontant(int montant) {
    this.montant = montant;
}

@Column(name = "COMP_IMPORTANCE", nullable = true)
public int getImportance() {
    return importance;
}

public void setImportance(int importance) {
    this.importance = importance;
}
}
@ManyToMany
@JoinTable(
    name = "T_PROJET_COMPOSANT",
    joinColumns = @JoinColumn(name = "PROJ_ID"),
    inverseJoinColumns = @JoinColumn(name = "COMP_ID"),
)