Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/393.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在双向关系中创建两列可以吗?_Java_Spring_Hibernate_Jpa - Fatal编程技术网

Java 在双向关系中创建两列可以吗?

Java 在双向关系中创建两列可以吗?,java,spring,hibernate,jpa,Java,Spring,Hibernate,Jpa,是否可以为双向关系创建一列 我的实体: @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 =

是否可以为双向关系创建一列

我的实体:

@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;
}
现在我看到数据库中有两列,有点混乱

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

更新:


您可以出于同样的目的使用单向关系。您只需要为特定的订阅添加一个访问列表/访问集,而不必为特定的访问创建订阅列表。 参考请访问[Java JPA]:


您可以出于同样的目的使用单向关系。您只需要为特定的订阅添加一个访问列表/访问集,而不必为特定的访问创建订阅列表。 参考请访问[Java JPA]:


不需要在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<>();
}


不需要在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<>();
}


您是指元素表中的1 FK列吗?这就是当你有一个PK列时得到的结果,yes@BillyFrost是的,我有两把外键。如果您的JPA提供商正在创建2个FK列而不是1个,那么请发布您的模式,并指出您遇到问题的列with@BillyFrost我上传了模式。列订阅和订阅id具有相同的日期。订阅表中有到订阅id的链接吗?出于某种原因,您在类中添加了一个额外的字段,这样您就得到了您所期望的元素表中的1 FK列?这就是当你有一个PK列时得到的结果,yes@BillyFrost是的,我有两把外键。如果您的JPA提供商正在创建2个FK列而不是1个,那么请发布您的模式,并指出您遇到问题的列with@BillyFrost我上传了模式。列订阅和订阅id具有相同的日期。订阅表中有到订阅id的链接吗?出于某种原因,您在类中添加了一个额外字段,这样您就得到了您应该得到的结果
@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;
}