我对Spring和JPA等比较陌生。我试图在标签和客户之间建立一种多对多的关系(双向)
我想我的关系是对的。除了一个问题外,一切都很好。标记值保存到数据库后为“Null”。
因此,我要做的是——向客户添加一个新的标签列表,然后在保存客户时使用级联选项来保存它。在调用CustomerRepository之前,我设置了一个调试点。保存(customer),标记都有值。在保存操作(在客户存储库上)后,我观察到两件事-针对客户的标记仍然与id无关,但在数据库中创建了标记,但值没有存储在列中。因此,如果我针对客户设置了4个标记,那么关系表和标记表中都会有4个新行,但是这些值将为null,即使它们是针对标记对象正确设置的。
此外,如果我在尝试通过级联进行保存之前直接对标记存储库调用save,它会保存值,并且一切正常(除了它的事务性方面)。。。
有人能解释为什么值列将通过Cascade.persist选项保存时为空吗?
来自客户类别
@ManyToMany
@JoinTable(
name="customer_tags",
joinColumns={@JoinColumn(name="customerId", referencedColumnName="id")},
inverseJoinColumns={@JoinColumn(name="tagId", referencedColumnName="id")})
@Cascade(value = CascadeType.PERSIST)
private List<Tag> tags = new LinkedList<Tag>();
来自标记类:
@ManyToMany(mappedBy = "tags")
private List<Customer> customers;
我的存储库是:
/**
* The tag interface is used to retrieve, save and manage customer tags.
*/
public interface TagRepository extends JpaRepository<Tag, Long> {
/**
* Finds a list of tags
* @return
*/
public List<Tag> findByTag(String tag);
}
我认为问题是您使用的是hibernate专用方法保存()
而不是持久()
。我建议您删除@Cascade(用于hibernate会话对象,而不是实体管理器)并使用@ManyTo众多(cascade=CascadeType. PERSIST)
,它应该按照您想要的方式工作。
事实上,当您调用保存
时,SpringData将主要使用合并
,因此您最好将级联设置为PERSIST
和MERGE
。
java prettyprint-override"> @ManyToOne(fetch = FetchType.LAZY, cascade = {CascadeType.PERSIST, CascadeType.MERGE})
@JoinColumn(name="address")
private Address address;
我在删除联接表中引用的实体时遇到问题。以下是三个链接的enitie。 当我尝试使用CrudRepository从来宾表中删除来宾时,它会给我这个错误。 错误:表“guest”上的更新或删除违反了表“guest\u group\u join”上的外键约束“FKKOUGVMCU860MOUACR1SHJXY”。键(id)=(4)仍然从表“guest\u group\u join”中引用。 有人能帮忙吗
我使用的是Spring数据jpa。将子实体添加到父实体后,我将父实体保存到数据库。我想得到孩子的身份证,但我发现我得到的是空的。 我在getId()方法中添加了@GeneratedValue(Strategy=GenerationType.IDENTITY),但它不起作用。 以下是模型: 父实体已经在数据库中,所以我直接找到它,父存储库entends Jpa列举 这里是我的测试代码: 我得到的输出
我想删除所有具有某些lineId的记录,以保存另一个具有相同lineId的记录(作为刷新),但删除后我无法保存任何内容。没有任何错误,但数据库中没有我的记录。 当我没有删除代码时,一切都会正确保存。
在使用hibernate和jpa的spring mvc项目中,我有一个实体和一个实体。每个可以有许多,但每个只能有一个。如何为现有的保存新的? 我读过很多关于这个的帖子。如果我试图保存新的,就会出现无法保存分离实体的错误。但如果我试图保存现有的,则不会保存该角色。我读了这篇帖子,建议将hibernate注释移动到getter,但当我这样做时,我会收到一个引用未知属性的hibernate映射错误。这
一些背景知识,我在我的web应用程序中使用JPA/Hibernate/Spring,我也使用org。springframework。orm。jpa。支持OpenEntityManagerViewFilter和用于处理实体的扩展持久性上下文。 问题: > 使用find方法从数据库加载实体,实体存储在会话中 用户更改实体并点击保存 用户更改反映在会话中存储的实体上(在控制器中) 实体被发送到服务类中的
我想创建一个与JHipster的用户实体有多对一关系的实体。 我使用JDL-Studio创建了以下实体和与用户的关系,它使用jhipster port-jdl作为. jh文件导入到我的微服务中: 在编译我的微服务时,我得到以下错误: 轮廓java:44:错误:找不到符号私人用户;符号:类用户位置:类配置文件 轮廓映射器。java:12:错误:找不到symbol@Mapper(componentMo