为了账号安全,请及时绑定邮箱和手机立即绑定

是否可以在双向关系中创建两列?

是否可以在双向关系中创建两列?

Helenr 2022-06-04 17:38:48
是否可以为双向关系创建一列?我的实体:@Entity@Table(name = "subscription")@Proxy(lazy = false)public class Subscription {@Id @GeneratedValue(strategy=GenerationType.IDENTITY)@Column(name = "subscription_id")private long id;@Column(name = "userid", nullable = false)private String userId;@Column(name = "saledate", nullable = false)@Temporal(TemporalType.DATE)private Date saleDate;@Column(name = "finishdate", nullable = false)@Temporal(TemporalType.DATE)private Date finishDate;@Column(name = "price", nullable = false)private long price;@Column(name = "description", nullable = false)private String description;@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER, mappedBy = "subscription")private List<VisitDate> visitDates = new ArrayList<>();}@Entity@Table(name="visitdate")public class VisitDate {@Id @GeneratedValue(strategy=GenerationType.IDENTITY)@Column(name = "id")private long id;private long subscription;@Column(name = "date", nullable = false)@Temporal(TemporalType.DATE)private Date date;@ManyToOne@JoinColumn(name="subscription_id")private Subscription associatedSub;}现在我看到数据库中有两列,有点困惑。我不想保存相同的数据,但想显示关于某天有多少用户访问的报告。
查看完整描述

2 回答

?
慕无忌1623718

TA贡献1744条经验 获得超4个赞

您不需要在 VisitDate 类中创建单独的字段“订阅”。Hibernate 会自动创建一个字段来存储订阅 ID。代码需要稍作改动。


@Entity

@Table(name = "subscription")

public class Subscription {


  @Id

  @GeneratedValue(strategy= GenerationType.IDENTITY)

  @Column(name = "subscription_id")

  private long id;


  @Column(name = "userid", nullable = false)

  private String userId;


  @Column(name = "saledate", nullable = false)

  @Temporal(TemporalType.DATE)

  private Date saleDate;


  @Column(name = "finishdate", nullable = false)

  @Temporal(TemporalType.DATE)

  private Date finishDate;


  @Column(name = "price", nullable = false)

  private long price;


  @Column(name = "description", nullable = false)

  private String description;


  @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER, mappedBy = "associatedSub")

  private List<VisitDate> visitDates = new ArrayList<>();

}


请注意,我已将 mappedBy 属性更改为指向上述类中的 associatedSub。


@Entity

@Table(name="visitdate")


public class VisitDate {

  @Id

  @GeneratedValue(strategy= GenerationType.IDENTITY)

  @Column(name = "id")

  private long id;


  @Column(name = "date", nullable = false)

  @Temporal(TemporalType.DATE)

  private Date         date;


  @ManyToOne

  @JoinColumn(name="subscription_id")

  private Subscription associatedSub;

}


查看完整回答
反对 回复 2022-06-04
?
慕码人8056858

TA贡献1803条经验 获得超6个赞

您可以将单向关系用于相同目的。您只需要为特定订阅添加访问列表/组,您不必为特定访问创建订阅列表。供参考访问 [Java JPA] :( https://en.wikibooks.org/wiki/Java_Persistence/OneToMany#Undirectional_OneToMany.2C_No_Inverse_ManyToOne.2C_No_Join_Table_.28JPA_2.0_ONLY.29)!


@Entity

@Table(name = "subscription")

@Proxy(lazy = false)

public class Subscription {


@Id @GeneratedValue(strategy=GenerationType.IDENTITY)

@Column(name = "subscription_id")

private long id;


@Column(name = "userid", nullable = false)

private String userId;


@Column(name = "saledate", nullable = false)

@Temporal(TemporalType.DATE)

private Date saleDate;


@Column(name = "finishdate", nullable = false)

@Temporal(TemporalType.DATE)

private Date finishDate;


@Column(name = "price", nullable = false)

private long price;


@Column(name = "description", nullable = false)

private String description;



@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER, mappedBy = "subscription")

private List<VisitDate> visitDates = new ArrayList<>();

}




@Entity

@Table(name="visitdate")


public class VisitDate {

@Id 

@GeneratedValue(strategy=GenerationType.IDENTITY)

@Column(name = "id")

private long id;


private long subscription;


@Column(name = "date", nullable = false)

@Temporal(TemporalType.DATE)

private Date date;

}


查看完整回答
反对 回复 2022-06-04
  • 2 回答
  • 0 关注
  • 137 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号