gpt4 book ai didi

java - Hibernate 实体类映射到两个不同的表

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:17:08 28 4
gpt4 key购买 nike

我正在尝试将我的 @Entity 对象映射到它们各自的类,其中一个是另一个的参数。

简单地说,我有这样的东西:

@Entity
@Table(name="TableA")
public class ClassA {
@Id
private long id;

private String paramA;

private ClassB classB;

// getters and setters here
}

B 类看起来像:

@Entity
@Table(name="TableB")
public class ClassB {
@Id
private long classAId;

private String paramB;

// getters and setters here
}

为了节省我正在使用的界面 - (我怀疑这个或我使用它的方式是我的问题?)

@Transactional
public interface ClassADao extends JpaRepository<ClassA, Integer> {

}

在我的数据库中,ClassA 中的所有参数都映射到相应的表,但 ClassB 除外,它的参数都匹配到 ClassB 的不同表。我是 Hibernate 的新手,希望它将 ClassB 的参数映射到正确的表。然而,它似乎试图将 ClassB 映射到 ClassA 表中的列,从而给我这个错误:

Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column 'classB' in 'field list'
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:422)
at com.mysql.jdbc.Util.handleNewInstance(Util.java:404)
at com.mysql.jdbc.Util.getInstance(Util.java:387)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:941)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3870)

我的问题是,是否有一种方法(最好通过注释)告诉 Hibernate 将 ClassB 中的参数映射到它自己的表?我试过使用 @SecondaryTable 但没有用。

提前致谢!

最佳答案

在对此发表评论的人的帮助下,我得出了以下解决方案:

@Id 
@GeneratedValue(strategy=GenerationType.IDENTITY)
private long id;

@OneToOne(cascade = {CascadeType.ALL})
@PrimaryKeyJoinColumn
private ClassB classB;

public setClassB(ClassB classB) {
this.classB = classB;
this.classB.setClassA(this);
}

然后像这样编辑 ClassB:

@Entity
@Table(name="TableB")
public class ClassB {
@MapsId
@OneToOne
@JoinColumn
private ClassA classA

private String paramB;

// getters and setters here - including for ClassA

现在,当我调用 Spring 注入(inject)的 ClassADao.save(classA) 时,ClassB 也会免费正确地保存在数据库中。

关于java - Hibernate 实体类映射到两个不同的表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33816296/

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