当前位置: 首页 > 知识库问答 >
问题:

无法使用spring JPararePository持久化数据

孔华池
2023-03-14

我创建了一个简单的3实体数据模型,当试图持久化数据时,它不起作用。下面是实体及其id类,server:

@Entity
@Data
public class Server {

    @Id
    private String name;

    private String serverUrl;

    @OneToMany(mappedBy = "server", fetch = FetchType.LAZY)
    private List<Service> services;
}

服务:

@Entity
@IdClass(ServiceId.class)
public class Service {

    @Id
    private String name;

    @Id
    @ManyToOne(fetch = FetchType.LAZY)
    private Server server;

    @OneToMany(mappedBy = "service", fetch = FetchType.EAGER)
    private List<Container> containers;
}

public class ServiceId implements Serializable {

    private String name;

    private Server server;
}

容器:

@Entity
@IdClass(ContainerId.class)
public class Container {

    @Id
    private String name;

    @Id
    @ManyToOne(fetch = FetchType.LAZY)
    private Service service;

    private String command;
    private String state;
    private String ports;
}

@Data
public class ContainerId implements Serializable {

    private String name;

    private Service service;
}
public interface ServiceRepository extends JpaRepository<Service, ServiceId>    {
}
public class SomeClass{

    @Autowired
    ServiceRepository serviceRepository;

    @Transactional
    public void insertServices(Service service) {
        serviceRepository.save(service); <- Exception HERE!
    }
}

创建的数据库似乎正常:

共有1个答案

山阳辉
2023-03-14

我在当前项目中也遇到了类似的复合键问题。
也许我错了,但对我来说,@idclass似乎只有在@id带注释的属性都不是外键的情况下才起作用。我最终使用@embeddedid重构了实体。

...

实际上,我还有一个想法:尝试将@ManyToOne批注也添加到ServiceID类的Server属性:

public class ServiceId implements Serializable {

    private String name;

    @OneToMany(mappedBy = "service", fetch = FetchType.EAGER)
    private Server server;
}
 类似资料:
  • 问题内容: 我遇到了使用EntityManager将元素持久保存到数据库的问题。根据我发现的答案,我在DaoJpa中尝试了这4种方法来执行此操作,但仍然失败。在这里,我附上了我尝试过的四种方法: 控制器部分中的代码: 1.道霸: 不起作用! 2。 我得到的例外:没有正在进行的交易 3。 我得到的异常:不允许在共享的EntityManager上创建事务-使用Spring事务或EJB CMT代替 4。

  • 我已经进入了几天,尽管我学到了很多,但我开始绝望了。 我已经尝试了这个极好问题的所有建议: 没有名为的EntityManager的持久性提供程序 我曾经使用无处不在的HibernateUtil类来处理这个问题,但是被告知要在这里转移到一个简单的JPA风格: Spring-RESTful控制器方法改进建议 不幸的是,我无法让豆子注射在spring boot中正常工作。以下是我的尝试: Spring

  • 除了第 3 章的 Express 的介绍以及后面第 10 章的安全之外,本章也是全书我最喜欢的章节了。 毫无疑问,几乎所有的应用都会涉及到数据存储。但是 Express 框架本身只能通过程序变量来保存数据,它并不提供数据持久化功能。而仅仅通过内存来保存数据是无法应对真实场景的。因为内存本身并不适用于大规模的数据储存而且服务停止后这些数据也会消失。另外,使用内存中的数据是无法跨机器共享的。虽然我们还

  • 我已经在这个问题上工作了两天了,现在我没有主意了。 下面是entity和dao类: 抽象性: 域道: 我不认为问题出在EntityManager或dao类中,因为EntityManager(find())至少有一个方法起作用。我会很感激和帮忙的。

  • Akka持久化使有状态的actor能留存其内部状态,以便在因JVM崩溃、监管者引起,或在集群中迁移导致的actor启动、重启时恢复它。Akka持久化背后的关键概念是持久化的只是一个actor的内部状态的的变化,而不是直接持久化其当前状态 (除了可选的快照)。这些更改永远只能被附加到存储,没什么是可变的,这使得高事务处理率和高效复制成为可能。有状态actor通过重放保存的变化来恢复,从而使它们可以重