我正在尝试在OneToOne映射中加入Hibernate实体。我能够从Main Entity获取给定主键的数据,但是加入实体返回null。我是Hibernate新手,任何帮助都将不胜感激。
我有两张桌子,
PT\U核心
ST_AUX
这两个表由其他应用程序填充,而我的是只读操作。
下面是我的第一个实体类(PtCore.java)
@Entity
@Table(name="PT_CORE")
public class PtCore implements Serializable{
@Id
@Column(name="ptId", nullable = false)
private int id;
@Column(nullable=false)
private int stId; //The Foreign key column
@OneToOne
@JoinTable( name = "core_aux", joinColumns = {@JoinColumn(Name="ptId")},
inverseJoinColumns = {@JoinColumn(Name="stId")}
)
private StAux staux;
//Getters, setters and toString() for above
}
StAux是另一个实体,定义如下:,
@Entity
@Table(name="ST_AUX")
public class StAux implements Serializable {
@Id
@Column(nullable=false)
private Integer stId;
@OneToOne
private PtCore ptcore;
@Column
private String stName;
//Getters, Setters and toString follow.
}
我在服务方法方面做了以下工作:
PtCore obj = (PtCore) session.get(PtCore.class,1);
System.out.println(obj);
在结果中,我得到ptName的值,但stAux类变量为空,表示连接没有按预期工作。
在您的关系中,拥有方是PtCore,反向是StAux。
在双向OneToOne关系中,反向侧必须具有映射属性。实际上,mappedBy属性包含拥有方的关联字段的名称。
因此,您必须更改反向端代码(StAux实体)。您必须将mappedBy属性添加到StAux类中的OneToOne中:
@OneToOne(mappedBy="staux")
private PtCore ptcore;
首先,您的PT_CORE
中存在映射信息。我假设它类似于FOREIGN KEY(stid)REFERENCES(stid)
。如果您想使用现有的模式和存量数据,我猜没有映射表core_aux
真正存在。至少您没有提到它。然而,它可以作为@JoinTable
注释显示,但仍然存在上述外键,这似乎是真正的映射(因此再次不是连接表)。
我建议如下
去掉这个
@Column(nullable=false)
private int stId; //The Foreign key column
从您的PtCore中。我认为这是不必要的。此外,在PtCore中,删除JoinTable(因为我上面说过),并将映射信息添加到OneToOne注释中,如:
@OneToOne
@JoinColumn(name = "stid")
private StAux staux;
从您的PT\U核心。
然后在StAux
中也更改一点:
@Id
@Column(name = "stid") // this might not be needed but if there is like "st_id"...
private Integer stId; // so just for sure
@OneToOne(mappedBy = "staux")
private PtCore ptcore;
因为您有现有的表和约束,如果hibernate尝试通过JPA指令再次自动生成这些表和约束,可能会出现错误。
例如,请检查此项以获取更多信息。
更新:刚刚意识到在您的标题中是@OneToOne
,但在您的代码中是@OneToOne
。
所以你可能想详细说明你的问题和/或标题。
我们必须在可选元素“mappedby”中指定什么。是特定模型的table_name还是classname? 哪个是正确的? 这个
我对冬眠学习还不熟悉,所以研究冬眠学习中使用的关系。我所了解的是-对于带有外键的一域单向关系映射,连接列将位于目标实体中(在我的示例中为Review类)。我不需要让它双向运行。 但是在实现它的同时,我得到了以下错误: OneToMany-单向-示例3 请帮帮忙!!!
问题内容: 对于@OneToMany关系,我必须映射到Objects吗? 我有下面的例子 如果酒吧是我的目标 问题就解决了 但是,我要避免创建仅代表一对字符串(引用键,值)的对象。 FOO和BAR存储在单独的表中 问题答案: 是您要寻找的。这使您可以为非实体类(例如Embeddable或Basic)定义映射。 http://en.wikibooks.org/wiki/Java_Persistenc
toString()]hibernate:/*插入com.pissolato.api.entitys.sale*/插入到sale(company,created,description,discount,sub_value,type,updated,user,value)值(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)
问题内容: 这是我在堆栈上的第一个问题,所以请谨慎:D 我正在尝试创建hibernate的OneToMany关系。当我尝试从数据库中获取一些数据时,出现了StackOverflowError。但是,当我删除OneToMany部分时,一切正常。这是我的REST服务的一部分,目前它可以在VMware vFabric Server和MySQL DB上运行。 获取示例: MySQL脚本: 类: 错误: 编
问题内容: 我遇到一个问题,其中Hibernate(4.1.8.FINAL)返回带有NULL值的列表(单向OneToMany映射)。 我得到的是: 我得到一个大小为21的列表,其中EntryAddress在第10个索引上,而2nd Entry Address在第20个索引上。 我所期望的 -我期望一个只有两个EntryAddress对象的List: 这是最小的源代码: 这是mysql结构(Inno