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