我有两个实体类,如下所示-
public class Parent {
@Id
private Integer parentId;
private String name;
@OneToMany(fetch = FetchType.LAZY, mappedBy = "parent", cascade = CascadeType.ALL)
private List<Child> children;
}
public class Child {
@Id
private Integer childId;
private String name;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "parentId", insertable = false, updatable = true, nullable = false)
private Parent parent;
}
@RestController
public class ParentController {
@Autowired
private ParentRepo repo;
@GetMapping("/parent")
public void get() {
Child c1 = Child.builder().childId(1).name("s1").build();
Child c2 = Child.builder().childId(2).name("s2").build();
List<Child> children = new ArrayList<>();
children.add(c1);
children.add(c2);
Parent parent = Parent.builder().parentId(1).name("PARENT")
.children(children)
.build();
Parent savedParent = repo.save(parent);
}
}
Tables -
CREATE TABLE public.parent
(
parent_id integer NOT NULL,
name character varying(255) COLLATE pg_catalog."default",
CONSTRAINT parent_pkey PRIMARY KEY (parent_id)
)WITH (
OIDS = FALSE
)
TABLESPACE pg_default;
CREATE TABLE public.child
(
child_id integer NOT NULL,
name character varying(255) COLLATE pg_catalog."default",
parent_id integer NOT NULL,
CONSTRAINT child_pkey PRIMARY KEY (child_id),
CONSTRAINT fk7dag1cncltpyhoc2mbwka356h FOREIGN KEY (parent_id)
REFERENCES public.parent (parent_id) MATCH SIMPLE
ON UPDATE NO ACTION
ON DELETE NO ACTION
)
WITH (
OIDS = FALSE
)
TABLESPACE pg_default;
我在保存子记录时出错。
错误-
Hibernate:插入子(名称,child\u id)值(?,)2022-07-19 23:12:31.727警告20940---[nio-8080-exec-2]o.h.engine.jdbc.spi。SqlExceptionHelper:SQL错误:0,SQLState:23502 2022-07-19 23:12:31.727错误20940---[nio-8080-exec-2]o.h.engine.jdbc.spi。SqlExceptionHelper:错误:“parent\u id”列中的null值违反了非null约束详细信息:失败的行包含(1,s1,null)。2022-07-19 23:12:31.728信息20940---[nio-8080-exec-2]o.h.e.j.b.内部。AbstractBatchImpl:hh000010:batch发布时,它仍然包含JDBC语句2022-07-19 23:12:31.754错误20940-[nio-8080-exec-2]o.a.c.c.c.[/]。[dispatcherServlet]:Servlet。路径为[]的上下文中servlet[dispatcherServlet]的service()引发异常[Request processing failed;嵌套异常为org.springframework.dao.DataIntegrityViolationException:无法执行语句;SQL[n/a];约束[parent_id];嵌套异常为org.hibernate.exception。ConstraintViolationException:无法执行具有根本原因的语句]
org.postgresql.util.PSQLException:ERROR:列"parent_id"中的空值违反了非空约束详细信息:失败的行包含(1, s1, null)。
不确定hibernate将如何拾取外键并将其分配给子级。
你得先设置双向关系
public class Parent {
@Id
private Integer parentId;
private String name;
@OneToMany(fetch = FetchType.LAZY, mappedBy = "parent", cascade = CascadeType.ALL)
private List<Child> children;
public void addChild(Child child) {
this.children.add(child);
child.setParent(this);
}
}
并通过该方法添加孩子。
我在Parent中提供了一个简单的oneToMany关系,并在Chile Entity类中提供了相应的ManyToOne: 起源: } 儿童班级: 操作类: 示例案例:Status_code Reason_text abc abc1 xyz xyz1 保存表单:Status_code Reason_text abc abc1 xyz xyz1 abc abc1 xy z xyz2 对于任何操作:N
我有两个表,asdf和qwer,两个表都有一个名为“id”的主键。当我连接这两个表时,结果将有两个名为id的列,而JOOQ无法将记录正确映射到pojo。 现在,每个Asdf实例都与元组中对应的Qwer实例具有相同的id。 有没有聪明的别名技巧可以解决这个问题,或者我在JOOQ文档中遗漏了什么,或者这是JOOQ中的一个bug?
我有一个父表和子表。父记录已由其他进程插入。我需要添加引用父记录的子记录,例如: 插入CHILD记录时,引用父记录的唯一信息是地址。我需要从父表中获取PARENT_ID,使用子的ADDRESS来设置子的FK。 在hibernate中有没有一种方法可以做到这一点,这样我就不需要通过地址查询父项来将其与子记录一起插入?或者,我是否继续沿着这条路径,按地址查询父对象,然后将父对象传递给子对象?
我有一个奇怪的错误:我有一个使用Hibernate的注释类。一切都很好,直到我开始这样介绍日志: 产生的错误是: [错误]原因:org。冬眠MappingException:无法确定组织的类型。slf4j。Logger,位于table:container,用于列:[org.hibernate.mapping.Column(Logger)] 根据我的理解,在这种情况下,静态场应该是合适的。那么为什么
我正在尝试使用Hibernate 4.3和SQL Server 2014,仅对尚未存储的实体执行批量插入到表中。我创建了一个简单的表,其中定义了一个主键来忽略重复的键 尝试通过Stateless会话插入方法执行批处理插入,如果一个或多个实体已经存储到数据库表中,则批处理插入可能会失败:Hibernate抛出StaleStateException: 当批处理语句完成时,Hibernate会检查返回的
我正在使用Hibernate和JPA注释来映射我的类。当hibernate尝试映射这个类时,我遇到了一个问题 我的Social alStat类是: 我得到了这个错误: 我猜发生这种情况是因为我试图映射到一个基本类,但@ElementCollection注释不应该解决这个问题吗? 我的item类如下所示: