gpt4 book ai didi

java - Hibernate一对一自动添加子对象

转载 作者:搜寻专家 更新时间:2023-10-30 19:52:57 25 4
gpt4 key购买 nike

我想使用 hibernate 一对一关系在数据库中自动添加子对象。使用以下代码它不在地址表中添加外键。

public class Address implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Basic(optional = false)
@Column(name = "id")
private Integer id;
@Column(name = "address")
private String address;
@OneToOne(cascade = CascadeType.ALL)
@PrimaryKeyJoinColumn(name = "p_id", referencedColumnName = "id")
private Person pId;

Getters And Setters
}

public class Person implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Basic(optional = false)
@Column(name = "id")
private Integer id;
@Column(name = "birthdate")
@Temporal(TemporalType.TIMESTAMP)
private Date birthdate;
@Column(name = "email")
private String email;
@Column(name = "mobile")
private BigInteger mobile;
@Column(name = "name")
private String name;
@OneToOne(mappedBy = "pId", cascade = CascadeType.ALL)
private Address address;

Getters And Setters
}

这是主要方法

public static void main(String[] args) 
{
try
{
Configuration configuration = new Configuration().configure(HibernateUtil.class.getResource("/hibernate.cfg.xml"));
StandardServiceRegistryBuilder serviceRegistryBuilder = new StandardServiceRegistryBuilder();
serviceRegistryBuilder.applySettings(configuration.getProperties());
ServiceRegistry serviceRegistry = serviceRegistryBuilder.build();
SessionFactory sessionFactory = configuration.buildSessionFactory(serviceRegistry);
Session session = sessionFactory.openSession();
Transaction transaction = session.beginTransaction();
Person person = new Person();
person.setBirthdate(new Date());
person.setEmail("hjhjhjhj@gmail.com");
person.setMobile(new BigInteger("44444444"));
person.setName("kjkljkljkj");
Address address = new Address();
address.setAddress("jkhkjhkj");
address.setPId(person);
person.setAddress(address);
session.save(person);
// session.save(address);
transaction.commit();
session.flush();
session.close();
System.out.println("Success...");
}
catch(Exception e)
{
e.printStackTrace(System.out);
}
}

最佳答案

@PrimaryKeyJoinColumn 在与一对一关系关联的实体具有相同的主键值时使用。在这里你显然想使用经典外键,所以将 Address 实体中的映射更改为:

@OneToOne(cascade = CascadeType.ALL) 
@JoinColumn(name = "p_id")
private Person pId;

关于java - Hibernate一对一自动添加子对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36058706/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com