我是Hibernate的新手,正在尝试学习它。我对@JoinCol列的用法感到困惑。我知道它创建了一个列来关联两个实体。我尝试过的是:
当面授课:
@OneToMany(cascade = CascadeType.ALL)
@JoinColumn(name = "person_id") // this creates a FK on house table with this name
private Set<House> houses = new HashSet<House>();
这将在House
表上创建一个名为person_id
的列。
内部课程:
@ManyToOne
@JoinColumn(name = "house_id")
private Person person;
这将在house
表上再次创建house\u id
列。但我希望能在Person
表上看到这个专栏。为什么会这样?
我在想@JoinColumn annotation会在表上创建一个连接列,这就是我们应用此注释的实体。所以在本例中,对于Person类,它在house表上创建Person_id,对于第二个,我希望在Person类上看到house_id。但它也会在家里的桌子上创造它。所以我很困惑。
那么它实际上是如何工作的呢?
假设house有一个名为person\u id的列,尝试将@JoinColumn(name=“house\u id”)
替换为@JoinColumn(name=“person\u id”)
然后删除@JoinColumn(name=“person_id”)
,并在OneToMany注释中添加属性mappedBy
@OneToMany(cascade = CascadeType.ALL, mappedBy = "person")
这样Hibernate将搜索所有人属性与当前person_id匹配的房子
@JoinColumn
创建一个有意义的列。
对于带有@JoinColumn
的@OneToMany
,join列需要转到目标实体表,即House
。如果该列是在源实体表中创建的,即个人
,则一个人只能分配一个房屋,因此它不会是一对多关联。
相反,对于带有@JoinColumn
的@manytone
,join列需要转到源实体(即House
)。如果该列转到Person
表,而您将给定的人分配到一所房子,则为Person。HOUSE_ID
列将设置为该房屋的ID。然后,将无法将另一栋房子分配给同一个人(因为person.house_ID
列已经被“使用”)。这基本上与之前的问题相同,但从协会的“内部”方面来看。
问题内容: 一个项目需要大量使用以下Jackson注释组合。因此,有没有一种方法可以创建另一个注释来避免丑陋的复制/粘贴: 更新: 我已经尝试过了,但是没有成功:-( 问题答案: 使用解决问题:
null 最终产品应该如下所示: 在上面的例子中,@public instance将只有uniqueKey、gtin、printedGtin作为属性。
问题内容: 是否存在列注释语法,该语法允许我直接在创建表语句(即,内联)中声明列的位置指定列注释?该11克规范没有提到任何东西,在另一页中提到的东西,但我无法得到它的工作。创建表后有一种指定注释的方法,但是我认为将注释与字段定义分开很烦人。我正在寻找这样的东西(不起作用): 问题答案: 恐怕“烦人”的语法是这样做的唯一方法。SQL Server,PostgreSQL和DB2使用相同的语法(尽管据我
我刚开始冬眠。我有一个与帐户和交易之间的双向映射的单人关系。我没有在这两个类中使用@JoinColumn,而在非所有者Account类中使用@MappedBy。一切正常。使用内存数据库中的H2,在事务表中创建新的联接列。那么@JoinColumn在OneToMany关系中有什么用--它仅仅用于单向映射吗?下面是代码。我还阅读了使用JPA@OneTomany关联时@JoinColumn和mapped
问题内容: 我试图在一个元素上拍两个或多个相同类型的注释,在这种情况下是方法。这是我正在使用的近似代码: 编译以上内容时,javac抱怨重复的注释: 这样根本不可能重复注释吗?从学步上讲,上面的两个@Foo实例是否由于内容不同而不同吗? 如果上述方法不可行,有哪些可能的解决方法? 更新:我被要求描述我的用例。开始。 我正在建立一种语法糖化机制,以“映射” POJO到文档存储(例如MongoDB)。
是否可以声明性地在类的字段上指定验证约束,以便其中一些约束只适用于某些层(或者被某些层忽略)? 其中是JSR 303 anotation REST API层 此处不存在 null