java - 实体关系是否正确?
问题描述
在我的项目中,我尝试使用 Spring data Jpa。我的查找方法(findById,findAll)工作正常,但删除和保存方法有问题。删除方法仅从鸭表中删除。保存不起作用:
Exception in thread "main" org.springframework.orm.jpa.JpaObjectRetrievalFailureException: Unable to find springdata.entities.FrogJpa with id 2; nested exception is javax.persistence.EntityNotFoundException: Unable to find springdata.entities.FrogJpa with id 2
我有 2 个实体:青蛙和鸭子。每只鸭子有 1 只青蛙(OneToOne)。实体关系有问题?
有我的实体类:
@Entity
@Table(name = "DUCKS")
public class DuckJpa implements Serializable {
@Id
private int id;
@Column(name = "NAME")
private String name;
@Column(name = "FLY")
private String flyBehavior;
@Column(name = "QUACK")
private String quackBehavior;
@OneToOne(optional = false)
@JoinColumn(name = "FROG_ID", unique = true, nullable = false, updatable = false)
private FrogJpa frogJpa;
public void setId(int id) {
this.id = id;
}
public void setName(String name) {
this.name = name;
}
public void setFlyBehavior(String flyBehavior) {
this.flyBehavior = flyBehavior;
}
public void setQuackBehavior(String quackBehavior) {
this.quackBehavior = quackBehavior;
}
public void setFrogJpa(FrogJpa frogJpa) {
this.frogJpa = frogJpa;
}
public int getId() {
return id;
}
public String getName() {
return name;
}
public String getFlyBehavior() {
return flyBehavior;
}
public String getQuackBehavior() {
return quackBehavior;
}
public FrogJpa getFrogJpa() {
return frogJpa;
}
和青蛙:
@Entity
@Table(name = "FROGS")
public class FrogJpa {
@OneToOne(optional = false, mappedBy = "frogJpa")
private DuckJpa duckJpa;
@Id
private int id;
@Column(name = "name")
private String name;
public void setId(int id) {
this.id = id;
}
public void setName(String name) {
this.name = name;
}
public void setDuckJpa(DuckJpa duckJpa) {
this.duckJpa = duckJpa;
}
public int getId() {
return id;
}
public String getName() {
return name;
}
public DuckJpa getDuckJpa() {
return duckJpa;
}
}
我的服务等级:
public interface DuckService {
List<DuckJpa> findAll();
Optional<DuckJpa> findById(Integer i);
DuckJpa save(DuckJpa duckJpa);
void delete(DuckJpa duckJpa);
}
它的实现:
@Service("springJpaDuckService")
@Transactional
public class DuckServiceImpl implements DuckService {
@Autowired
private DuckJpaRepository duckJpaRepository;
@Transactional(readOnly = true)
public List<DuckJpa> findAll() {
return new ArrayList<>(duckJpaRepository.findAll());
}
@Override
public Optional<DuckJpa> findById(Integer i) {
return duckJpaRepository.findById(i);
}
@Override
public DuckJpa save(DuckJpa duckJpa) {
duckJpaRepository.save(duckJpa);
return duckJpa;
}
@Override
public void delete(DuckJpa duckJpa) {
duckJpaRepository.delete(duckJpa);
}
解决方案
使用@OneToOne(cascade=CascadeType.ALL, fetch = FetchType.LAZY)
. 有关更多信息,请参阅Hibernate 中的级联是什么?
推荐阅读
- android - 当按钮处于不同布局时如何使用 onClickListener?
- java - Secured JMS queue connection jboss
- bash - 使用 Bash 脚本获取带有 ${parameter##word} 的子字符串
- java - 从嵌套 JSON 中选择特定列时,Apache Spark 失败
- java - 无法使用 Java 打印 Unicode 数学相关字符 - itextpdf
- c - Cmd cannot run my executable without providing ".exe"
- julia - fieldnames(x::DataType) 在 Julia 1.0.1 中不起作用
- javascript - rc-calendar 显示在反应组件内
- c# - 计算模式/模式,然后上传到文本框 C#
- ibm-midrange - DB2 SQL 代码 -7008