gpt4 book ai didi

java - Nullable @ManyToOne 不接受 null 值

转载 作者:太空宇宙 更新时间:2023-11-04 10:13:46 24 4
gpt4 key购买 nike

我有一个多对一的关系,我希望它可以为空。这是父级:

@Entity
@Table(name = "C_CUSTOMER")
class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;

@OneToMany (fetch = FetchType.LAZY, mappedBy="user", cascade = CascadeType.REMOVE)
private List<Profile> profiles;
}

还有 child :

@Entity
@Table(name = "C_PROFILE")
class Profile {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;

@ManyToOne(optional = true)
@JoinColumn(nullable = true, name = "user_id", referencedColumnName = "id", insertable = false, updatable = false)
private User user;
}

当我尝试保存没有 userId 的配置文件时,会引发以下错误:

org.hibernate.TransientPropertyValueException: object references an unsaved transient instance - save the transient instance before flushing : fr.entity.Profile.user -> fr.entity.User

如果字段 userId 有值,那么就可以顺利运行。

我尝试了一些有关 SO 的其他问题的答案,但到目前为止没有任何效果。最简单的方法是放弃实体文件中的关系并使用 Integer customerId ,但这对我来说并不是很令人满意,因为这意味着级联删除将不再起作用。

提前致谢。

编辑

问题来自实体 <-> dto 映射。我添加了一个关于它的答案,如果我遇到解决方法,可能会进行编辑。

最佳答案

在我的机器上尝试了你的代码。以下是我的实体类:

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
import lombok.Data;

@Entity
@Table(name = "C_PROFILE")
@Data
public class Profile {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;

private String name;

@ManyToOne(optional = true)
@JoinColumn(nullable = true, name = "user_id", referencedColumnName = "id", insertable = false, updatable = false)
private User user;
}

用户类别:

import java.util.List;
import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import lombok.Data;

@Entity
@Table(name = "C_CUSTOMER")
@Data
class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;

private String email;

@OneToMany (fetch = FetchType.LAZY, mappedBy="user", cascade = CascadeType.REMOVE)
private List<Profile> profiles;
}

存储库:

import org.springframework.data.jpa.repository.JpaRepository;
import io.polarisdev.returns.model.Profile;

public interface ProfileRepository extends JpaRepository<Profile, String> {
}

无需用户即可保存配置文件的代码:

Profile p = new Profile();
p.setName("Name");
profileRepository.save(p);

关于java - Nullable @ManyToOne 不接受 null 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51985829/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com