当前位置: 首页 > 知识库问答 >
问题:

使用联接表创建单向OneToMany关系

马坚
2023-03-14

我有一个用户表和兴趣表,兴趣表的行数是finiate,我试图建模senario,每个用户都有一组兴趣这是我的代码:

@Entity 
@Table(name="user")
public class User extends Model{
@OneToMany(cascade = CascadeType.PERSIST)
@JoinTable(name="user_interest")
public List<Interest> interests;
} 


@Entity 
@Table(name="interest")
public class Interest extends Model{
@Id
public Long id;
public String   name;
public String   image;
}

自然,我想有一个联合表,但是进化忽略了创建联合表,并试图通过在兴趣表中添加一个额外的列来做到这一点

create table interest (
19 id                        bigint auto_increment not null,
20 user_id                   bigint not null,
21 name                      varchar(255),
22 image                     varchar(255),
23 constraint pk_interest primary key (id))
.

我做错了什么??如何使用ebean在play2.2中创建一个简单的OneTo多项关系与连接表?

谢谢和问候

共有2个答案

齐弘业
2023-03-14

在撰写本报告时,Ebean不支持@JoinTable中的@OneTo很多。

这是一个公开问题(GitHub上的123)。

施鸿
2023-03-14

这是正确的行为,用户模型中的@OneToMany关系可以被解读为兴趣模型中的@manytone,字面意思是“每个兴趣可能只属于一个用户”,因此在这种情况下,兴趣包含带有用户ID的字段就足够了。

联接表用于存储MM关系,因此要强制使用联接表,只需将用户模型中的关系更改为@manytomy,它就会自动创建您想要的关系。当然,若每个兴趣只能和一个用户连接,那个么这并没有任何意义,因为若给定的兴趣还并没有和其他用户连接,那个么在保存时您需要进行控制。

顺便说一句:两个小贴士:

  1. 您不需要使用@Table(name="interest")注释如果您的模型具有相同的名称,Ebean将自动创建它
  2. 如果你打算在将来(即Heroku上)移动到后题,将用户模型的表名更改为用户(或其他东西),因为用户是PG中的关键字会引起冲突。
 类似资料:
  • 问题内容: 为什么hibernate对这些类使用联接表? 我既不需要联接表也不需要双向关联:( 问题答案: 因为这是它的设计方式,也是JPA规范要求它映射这样的关联的方式。如果要在广告投放表中添加联接列,请使用 这是有据可查的。

  • 我在将带有@ManyToOne关系的实体(雇员)映射到带有@OneToMany关系的实体(社区)时遇到了问题。 当我将一个实体(社区)分配给一个实体(员工),其中社区的值为空时,它工作正常。 问题出现了,如果雇员已经为社区分配了价值。当我更改该值并保存更改时,该员工为社区获得了新的值,并且这个新社区在集合中获得了该员工。唯一的问题是,老社区仍然有这个员工在收集,但它应该被删除。这只有在数据库重新启

  • 我正在尝试使用一个不是很简单的关联表在两个JPA实体之间进行ManyTo许多连接。我想知道是否有一种方法可以在不创建关联表实体的情况下实现这一点(类似于使用@JoinTable)。 表A-ID(PK) -名称 表b -ID(PK) -名称 TableMapping-ID(PK) -Parent\u ID(FK)-- 映射以我上面描述的方式存储,原因我不知道,也无法更改。很多地方都在这样使用它,我必

  • 问题内容: 我正在为我的实习工作开发JPA兼容套件…该套件的一部分涉及测试极端情况的正确实现。 具有mapedBy属性。JPA指出: 字符串mappingBy-拥有关系的字段或属性。除非关系是单向的,否则为必需。 没有给出默认值-默认列为空。 给定双向-此示例来自JPA 2.0 JSR-317规范本身! 顾客 电话号码 尚未在of的中定义mapledBy属性!我不知道的双向映射有默认值吗? 我查看

  • 7.3.1. 一对多(one-to-many) 基于连接表的单向一对多关联 应该优先被采用。请注意,通过指定unique="true",我们可以把多样性从多对多改变为一对多。 <class name="Person"> <id name="id" column="personId"> <generator class="native"/> </id> <s

  • 问题内容: 这与“没有单独的联接表的hibernate@OneToMany”类似,因为我需要一个没有联接表的@OneToMany关系。但是,我也不想定义逆关系。删除相反的内容似乎会导致自动生成联接表…是否有解决方法? 问题答案: 在JPA 2.0+中,您可以使用@JoinColumn作为避免生成联接表的方法。 尝试一下。 更新 上面提供的信息摘自EJB 3.0o’illy书(查找@JoinColu