我有这个型号
public class Customer {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long id;
@OneToOne
@PrimaryKeyJoinColumn
private Address registred_address_id;
@OneToOne
@PrimaryKeyJoinColumn
private Address actual_address_id;
...
而我有这个方法
private Customer addCustomer(String first_name, String last_name, String middle_name, String sex, Address address) {
Customer customer = new Customer(first_name, last_name, middle_name, sex);
customer.setActual_address_id(address);
customer.setRegistered_address_id(address);
customerRepo.save(customer);
return customer;
}
但是hibernate没有设置实际地址id和注册地址id(它是OneTONE)
Hibernate:插入客户(名字、姓氏、中间名、性别)值(?、、?、?)2021-03-18 14:01:58.340警告12836---[nio-8080-exec-1]o.h.发动机。jdbc。spi。SqlExceptionHelper:SQL错误:0,SQLState:23502 2021-03-18 14:01:58.340错误12836---[nio-8080-exec-1]o.h.engine。jdbc。spi。SqlExceptionHelper:ББББА:空值:注册地址id:客户非空值(6,空值,空值,空值,空值,男性)。
你的映射是矛盾的。
从一个侧面看,您需要客户。插入后由数据库生成的id
。这就是GenerationType。身份实际上意味着什么。
另一方面,您尝试使用
@PrimaryKeyJoinColumn
什么是客户。id应通过
地址设置。id
。@PrimaryKeyJoinColumn
的正确映射应如下所示:
@Entity
public class Customer {
@Id
private long id;
@OneToOne
@PrimaryKeyJoinColumn
private Address address;
public void setAddress(Address address) {
this.address = address;
this.id = address.getId();
}
// ...
}
但这不符合你的要求。
因此,我建议您按照以下方式更正客户表:
create table customer
(
id bigserial not null,
reg_address_id bigint,
act_address_id bigint,
-- ...
primary key(id),
foreign key(reg_address_id) references address(id),
foreign key(act_address_id) references address(id)
);
然后使用以下映射:
@Entity
public class Customer {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@OneToOne
@JoinColumn(name = "reg_address_id")
private Address registredAddress;
@OneToOne
@JoinColumn(name = "act_address_id")
private Address actualAddress;
// ...
}
我有一个@OneToOne关系映射。我可以获取记录并查看关系,但我无法创建记录并保留外键。目前,当在父表(FacilityGeneral)中创建新记录时,我也会在子表(FacilityLocation)中创建新记录,但是,子表中的外键不会自动创建。 我试图通过编程将创建为父表(FacilityGeneral)中主键的序列值分配给子表中的不同字段来持久化它,但由于序列#在对象持久化之前不会生成,因此
如果我继续尝试持久化这个实体,我将得到中持久化。 做这件事的正确方法是什么。可能是我理解的不对。
父级 子 在数据库子表中有一列ParentId->典型的一个(父)->多个(子)关系 现在我创建了两个实体 null 我总是需要同时创建密钥OneToMany和ManyToOne的两个部分吗?还是我可以只创建ManyToOne,而不关心我有孩子的父对象? 什么会导致Hibernate给我一条消息,即没有子级的父级违反外键约束?
我将设置为,并将其添加到我的。当我运行和echo,它们都给了我正确的信息。但是,当我运行libgdx安装程序时,它会给出以下错误:<code>错误:未设置JAVA_HOME,并且在路径中找不到任何“JAVA”命令。 请在您的环境中设置JAVA_HOME变量,以匹配您的JAVA安装位置。 有什么想法吗?
我得到这个例外: Java方法 public void getAllRevisions() {
严重:不成功:创建表user_account(user_id bigint not null auto_increment,active bit,address_1 varchar(255),address_2 varchar(255),email varchar(255),first_name varchar(255),last_name varchar(255),phone_contact_1