是不是好了以双向关系创建两列?

问题描述 投票:1回答:2

是否有可能创建一个双向关系一个栏?

我的实体:

@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;
}

现在我看到在数据库中,有点困惑两列。

我不希望保存相同的数据,但要显示一个关于有多少用户在访问某一天的报告。

更新:

enter image description here

java spring hibernate jpa
2个回答
3
投票

你是不是需要在网上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;
}

2
投票

您可以使用单向关系为同一目的。你只需要添加一个列表/设置访问特定订阅的,您不必创建订阅列表特定访问。参考访问[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;
}
© www.soinside.com 2019 - 2024. All rights reserved.