我有这些实体
标准化ChannelStock。Java语言
@Entity
@Table(name = "stocks")
public class NormalizedChannelStock {
@EmbeddedId
private NormalizedChannelStockId id;
@Column(name = "qty")
private int qty;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "channel_id", insertable = false, updatable = false)
private Channel channel;
@Column(name = "created_at", updatable = false)
private Timestamp createdAt;
@Column(name = "updated_at", updatable = false)
private Timestamp updatedAt;
public NormalizedChannelStockId getId() {
return id;
}
public void setId(NormalizedChannelStockId id) {
this.id = id;
}
public int getQty() {
return qty;
}
public void setQty(int qty) {
this.qty = qty;
}
public Channel getChannel() {
return channel;
}
public void setChannel(Channel channel) {
this.channel = channel;
}
public Timestamp getCreatedAt() {
return createdAt;
}
public Timestamp getUpdatedAt() {
return updatedAt;
}
}
NormalizedChannelStockId。Java语言
@Embeddable
public class NormalizedChannelStockId implements Serializable {
@Column(name = "channel_id")
private Integer channelId;
@Column(name = "sku")
private String sku;
public NormalizedChannelStockId() {
}
public NormalizedChannelStockId(Integer channelId, String sku) {
this.channelId = channelId;
this.sku = sku;
}
public Integer getChannelId() {
return channelId;
}
public void setChannelId(Integer channelId) {
this.channelId = channelId;
}
public String getSku() {
return sku;
}
public void setSku(String sku) {
this.sku = sku;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
NormalizedChannelStockId that = (NormalizedChannelStockId) o;
return channelId.equals(that.channelId) &&
sku.equals(that.sku);
}
@Override
public int hashCode() {
return Objects.hash(channelId, sku);
}
}
Channel.java
@Entity
@Table(name = "channels")
public class Channel {
@Id
@Column(name = "channel_id")
private int channelId;
@Column(name = "channel_name")
private String channelName;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "store_id", insertable = false, updatable = false)
private Store store;
public int getChannelId() {
return channelId;
}
public void setChannelId(int channelId) {
this.channelId = channelId;
}
public String getChannelName() {
return channelName;
}
public void setChannelName(String channelName) {
this.channelName = channelName;
}
public Store getStore() {
return store;
}
public void setStore(Store store) {
this.store = store;
}
}
我面临的问题是
List<NormalizedChannelStock> entitiesToSave = ...
List<NormalizedChannelStock> savedEntities = normalizedChannelStockService.saveAll(entitiesToSave);
如图所示,savedentialities中返回的实体将其通道内部对象设置为null,以及其created\u at和updated\u at
这是正常的行为吗?当我在存储库上运行findAllById
时,实体中的Channel
被正确地延迟加载,因此我相信实体在代码中被正确映射。问题是在我保存它们之后。JPA保存后没有重新加载实体吗?
正如您在注释中所述,在保存之前没有设置这些值。
JPA不会为您加载它们。JPA在保存时几乎不加载任何内容,除非id是由数据库生成的。
同一问题/限制/误解的一种更常见的情况是双向关系:JPA几乎忽略了非所有权方,开发人员必须确保双方始终保持同步。
您必须自己刷新实体。请注意,仅在同一事务中加载它不会有任何效果,因为它将来自一级缓存,并且将是完全相同的实例。
在我的Web应用中,在服务布局中,我对“餐厅”实体使用代理(在“餐厅”字段上使用fetchtype.lazy)。 “get()”进入存储库:
我在删除联接表中引用的实体时遇到问题。以下是三个链接的enitie。 当我尝试使用CrudRepository从来宾表中删除来宾时,它会给我这个错误。 错误:表“guest”上的更新或删除违反了表“guest\u group\u join”上的外键约束“FKKOUGVMCU860MOUACR1SHJXY”。键(id)=(4)仍然从表“guest\u group\u join”中引用。 有人能帮忙吗
null 这些类有各自的映射,在数据库模型中,这些表没有关联,在hibernate映射中也没有关联,但是在保存合同时,它必须在字段(业务规则)中具有相同的,但在某些情况下,也给出了没有验证的合同。 我的问题是当我运行HQL查询时: 但Hibernate使用交叉连接语句翻译并合并所有记录。是否有方法在文件中的非相关类之间执行HQL查询? 规则:不应是映射的实体。
在使用Hibernate和Jpa的spring boot应用程序中,我需要在saveAll()之前关闭select,以提高高记录数的性能。 我找到了一个使用JPQL的方法,性能很好(在30s内删除+保存10k条记录),但我希望继续使用hibernate和JPA。 我的期望是,当我运行用Java编写的代码时,我必须删除一个表的所有记录,然后保存另一个表的所有记录。当我以经典的方式(deleteAll
既然有一个,那么当使用时,有没有办法刷新更新的实体? 我试图按批处理更新实体。 真的会有很大的帮助! 非常感谢。
我试图坚持两个实体,它们有一对一和多对一的关系。 我正在尝试将表单集合嵌入到表单中。 我有一个多对一相关的实体,每次我创建一个新的课程简历,它与Candidat列相关candidat_id_id为空。 除了数据可数据中的Candidat id之外,只有实体Curendar umVitae被成功创建和持久化。 简历表 id|titre|candidat_id_id|id_education cand