Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.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 JPA:定义复杂的@OneToMany关系_Java_Jpa_Entity Relationship_One To Many - Fatal编程技术网

Java JPA:定义复杂的@OneToMany关系

Java JPA:定义复杂的@OneToMany关系,java,jpa,entity-relationship,one-to-many,Java,Jpa,Entity Relationship,One To Many,我已经定义了一组表t1,t2。。。总氮: mysql> desc t1; +-------------+------------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +-------------+------------------+------+-----+---------+--

我已经定义了一组表t1,t2。。。总氮:

mysql>  desc t1;
+-------------+------------------+------+-----+---------+----------------+
| Field       | Type             | Null | Key | Default | Extra          |
+-------------+------------------+------+-----+---------+----------------+
| id          | int(10) unsigned | NO   | PRI | NULL    | auto_increment |
(...)
+-------------+------------------+------+-----+---------+----------------+

(...)

mysql>  desc tN;
+-------------+------------------+------+-----+---------+----------------+
| Field       | Type             | Null | Key | Default | Extra          |
+-------------+------------------+------+-----+---------+----------------+
| id          | int(10) unsigned | NO   | PRI | NULL    | auto_increment |
(...)
+-------------+------------------+------+-----+---------+----------------+
以及一个表,该表将存储关于表t1中每个记录的一些注释,。。。总氮:

 mysql> desc postit;

+---------------+------------------+------+-----+---------+----------------+
| Field         | Type             | Null | Key | Default | Extra          |
+---------------+------------------+------+-----+---------+----------------+
| id            | int(10) unsigned | NO   | PRI | NULL    | auto_increment |
| foreign_id    | int(10) unsigned | NO   | MUL | NULL    |                |
| foreign_table | varchar(20)      | NO   | MUL | NULL    |                |
| content       | text             | NO   |     | NULL    |                |
(....)
+---------------+------------------+------+-----+---------+----------------+
现在,我应该如何为表“t1”定义@实体

@Entity(name="T1")
@Table(name="t1")
public class T1
    {
        (...)
        public List<PostIt> getComments() { ... }
        }

是否有特定的JPA注释来定义此关系,或者我应该(如何)在T1的每个实例中插入一个EntityManager,并调用@NamedQuery?

我认为您应该使用

这样你就有了一张桌子

@Entity
@DiscriminatorColumn(name="type_id")
@DiscriminatorValue("-1")
...
class AbstractTable {

@OneToMany(mappedBy="foreign_id")
public List<PostIt> getComments() { ... }
        }
...
}
若您需要双向关系,那个么您需要弄清楚如何从POSIT实体引用到表。我想是这样的

@ManyToOne
public AbstractTable getTable() { ... }
应该有用


更多信息可以在这里找到

我认为您应该使用

这样你就有了一张桌子

@Entity
@DiscriminatorColumn(name="type_id")
@DiscriminatorValue("-1")
...
class AbstractTable {

@OneToMany(mappedBy="foreign_id")
public List<PostIt> getComments() { ... }
        }
...
}
若您需要双向关系,那个么您需要弄清楚如何从POSIT实体引用到表。我想是这样的

@ManyToOne
public AbstractTable getTable() { ... }
应该有用


更多信息可在此处找到

您的设计对应于一个继承树,根AbstractComment实体的所有子类将使用鉴别器列(
foreign\u table
)存储在同一个表中:

@实体
@表(name=“posit”)
@继承(策略=单表)
@鉴别器列(name=“foreign\u table”,鉴别器类型=字符串)
公共抽象类AbstractComment{
//…字段、getter、setter
}
@实体
@鉴别器值(“t1”)
公共类T1Comment扩展了AbstractComment{
}
@实体
@表(name=“t1”)
公共类T1{
@独身癖
@JoinColumn(name=“foreign\u id”)
私人评论;
}

您的设计对应于一个继承树,其中根AbstractComment实体的所有子类将使用鉴别器列(
foreign\u table
)存储在同一个表中:

@实体
@表(name=“posit”)
@继承(策略=单表)
@鉴别器列(name=“foreign\u table”,鉴别器类型=字符串)
公共抽象类AbstractComment{
//…字段、getter、setter
}
@实体
@鉴别器值(“t1”)
公共类T1Comment扩展了AbstractComment{
}
@实体
@表(name=“t1”)
公共类T1{
@独身癖
@JoinColumn(name=“foreign\u id”)
私人评论;
}

ok,据我所知,我需要为我的“N”表创建“N”类。谢谢。好的,据我所知,我需要为我的“N”表创建“N”类。非常感谢。
@Entity
@Table(name = "postit")
@Inheritance(strategy = SINGLE_TABLE)
@DiscriminatorColumn(name = "foreign_table", discriminatorType = STRING)
public abstract class AbstractComment {
    // ... fields, getters, setters
}

@Entity
@DiscriminatorValue("t1")
public class T1Comment extends AbstractComment {

}

@Entity
@Table(name="t1")
public class T1 {
    @OneToMany
    @JoinColumn(name = "foreign_id")
    private Set<T1Comment> comments;
}