我看过几百个帖子,跟我的不太像:(
请考虑以下情况。
Mysql架构:
create table parent(
id int,
col1 int,
col2 int,
primary key(id)
)
create table child(
id int,
col1 int,
col2 int,
primary key(id)
)
请注意,父级之间没有明确的/关键的关系
现在,我只想获取所有具有相同col1值的“子”对象
我尝试过的那种Hibernate实体,
@Entity
public class parent{
@Id
private int id;
@Column
private int col1;
@Column
private int col2;
@OneToMany
@JoinColumns({
@JoinColumn(name = "col1"),
@JoinColumn(name = "col2")
})
private List<Child> children;
/**
Other logic goes here..
**/
}
子实体为,
@Entity
public class Child{
@Id
private int id;
@Column
private int col1;
@Column
private int col2;
/**
Other logic goes here..
**/
}
结果:Hibernate错误报告“从“Parent”引用“Child”的外键的列数错误。应为1”
我将其解释为,@JoinColumn只能使用“id”完成
问题:
1) hibernate的所有@OneToMany@manytone等是否需要表之间/实体处的显式/键引用[由@Id注释]?
2)我应该做些什么来实现这一点?
尝试使用:@OneTo许多@JoinColns({@JoinCollie(name="col1",参考列名="col1"),@JoinCollie(name="col2",参考列名="col2") })
这里,TableA与TableB有一对一的关系,即TableA中的一条记录可以在TableB中有多条记录。因为表A中的col1在表B的col1中被引用为外键。下面的JPA代码成功地获取了所有结果。
DROP table x.TableA;
CREATE TABLE x.TableA (
Id BIGINT IDENTITY(1,1) NOT NULL,
col1 varchar(30) NOT NULL,
CONSTRAINT PK_col1 PRIMARY KEY(col1)
);
DROP table x.TableB;
CREATE TABLE x.TableB (
Id BIGINT IDENTITY(1,1)NOT NULL,
col1 varchar(30) NOT NULL,
col2 varchar(10) NULL
);
ALTER TABLE x.TableB
ADD CONSTRAINT FK_TableB_col1 FOREIGN KEY (col1)
REFERENCES x.TableA (col1)
;
@Entity
@Table(name = "TableA", schema = "x")
public class ClassA implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(name = "col1")
private String col1;
@OneToMany(
cascade = {CascadeType.ALL},
orphanRemoval = true,
fetch = FetchType.EAGER)
@JoinColumn(name = "col1", referencedColumnName = "col1")
private List<ClassB> objB = new ArrayList<>();
}
----------------------------------
@Entity
@Table(name = "TableB", schema = "x")
public class ClassB implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(name = "col1")
private String col1;
@Column(name = "col2")
private String col2;
}
我目前在数据库中的一对一/多对一映射时遇到问题。我希望我的图书表具有与“出版商”、“流派”、“评级”和“状态”表的@ManyToOne映射。 这是我的Book实体类的外观: 例如,我的Publisher实体类(类型、评级和状态类完全相同): 唯一的区别是类型、评级和状态的书籍字段,f. e: 这就是我的堆栈跟踪的样子: 更新的堆栈跟踪:
我们系统的所有用户都来自一个主“用户”类。同样,我们希望以相同的方式构造数据库,拥有一个主“用户”表,该表与特定用户类型的必要表连接,以提供额外的用户信息。 以这三个基本表格为例: 表用户 user_id|user_email|user_firstname|user_lastname|... 表雇员 user_id|employee_staff_number|... 表管理 user_id|adm
我如何才能做到这一点,使我的A实体仅由B的外键持久化?也就是说,只有外键被插入到数据库中(因为B是一个主表,所以我不需要插入元素)。
问题内容: 我有两个实体: 保存首选项时,我具有accountId,但没有Account实体。在这种情况下,如何保存首选项? 加载帐户实体并在首选项上进行设置?对我来说,这似乎是对数据库的错误旅行。 是否具有一个可持久保存的accountId字段并使Account字段为只读?同时拥有一个accountId字段和一个Account字段似乎多余吗? 使用NamedQuery保留首选项?我希望只是通用地
我决定在我最近开始的项目中使用JPA 2.1的实体图功能,但我遇到了一个问题。 当您将图形扩展到 ManyToOne 关系上时,效果很好,但对于 OneToMany,结果会重复,因为我的提供程序(Hibernate)使用左外连接。 我看到一些解决方案,他们提出了独特的关键字来解决这个问题,但我认为这是一个棘手的解决方案,即使我们如何才能让下一级实体不同。 我的意思是,如果我有3个实体A、B和C,我
问题内容: 我回到Java世界,并尝试使用JPA,Hibernate和PostgreSQL配置一个新的Spring Web应用程序。 我发现了许多带有各种XML配置文件的较早的示例,并且我想知道是否存在一种不依赖XML文件编写的执行该配置的首选新方法。 我需要配置的一些东西是hibernateSQL方言,驱动程序等。 问题答案: 将以下片段放入带有和注释的类中 Hibernate / JPA(编辑