Java JPA:定义复杂的@OneToMany关系
我已经定义了一组表t1,t2。。。总氮: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 | +-------------+------------------+------+-----+---------+--
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;
}