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

在RESTful web服务中接收带有@JoinColumn的Spring实体

萧德庸
2023-03-14

我有这些桌子:

CREATE TABLE ref.doc (
    id       serial PRIMARY KEY,
    iddoc    integer NOT NULL UNIQUE,
    docname  varchar(254) NOT NULL
);

CREATE TABLE person (
    id       serial PRIMARY KEY,
    name     varchar(40) DEFAULT NULL, 
    doctype  integer DEFAULT NULL REFERENCES ref.doc(iddoc)
);

我需要使用Spring构建一个RESTful Web服务,它接收JSON并在验证后将它们保存到数据库中。例如,在ref.doc中有一条带有iddoc=2的记录。因此的JSON如下所示:

{
    "name": "John",
    "doctype": 2
}

我想这样做:

@RestController
public class PersonController {

    @Autowired
    PersonRepository personRepository;

    @Transactional
    @RequestMapping(value = "/add", method = RequestMethod.POST)
    @ResponseBody
    public Person add(@RequestBody Person person) {
        // some logic
        personRepository.saveAndFlush(person);
        return person;
    }
}

我拥有以下实体:

@Entity
@Table(schema = "ref")
public class Doc {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @JsonIgnore
    private long id;

    private Integer iddoc;
    private String docname;

    ...
}

@Entity
public class Person {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @JsonIgnore
    private long id;

    private String name;

    @ManyToOne
    @JoinColumn(name = "doctype", referencedColumnName = "iddoc", nullable = false)
    private Doc doc;

    ...
}

在这种情况下,person中的doc总是为null,这很容易理解。但是如何实现我需要的行为呢?

共有2个答案

虞华翰
2023-03-14
        @RestController
        public class PersonController {

            @Autowired
            PersonRepository personRepository;

            @Autowired
            DocRepository docRepository;

            @Transactional
            @RequestMapping("/add")
            @ResponseBody
            public void add(@RequestBody Person person) {
                Doc doc=docRepository.findByIddoc(person.getDoc().getIddoc());
                if(!(doc==null)){
                Person personAdd=new Person();
                personAdd.setName("name");
                personAdd.setDoc(doc);
                personRepository.saveAndFlush(person);
                }
            }
        }



    @Entity
    public class Person {

        @Id
        @GeneratedValue(strategy = GenerationType.IDENTITY)
        @JsonIgnore
        private long id;

        private String name;

        @ManyToOne(cascade=CascadeType.ALL)
        @JoinColumn(name = "doctype", referencedColumnName = "iddoc", nullable = false)
        private Doc doc;






@Entity
@Table(schema = "demo")
public class Doc {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @JsonIgnore
    private long id;

    private Integer iddoc;
    private String docname;
璩浩广
2023-03-14

看到这个链接了吗?

http://www.javaworld.com/article/2077819/java-se/understanding-jpa-part-2-relationships-the-jpa-way.html

特别是查看订单表和客户表之间的关系。

据我所知,您需要一个人拥有多个文档。所以试着改变定义

private Doc doc;

@OneToMany(mappedBy="person", fetch=FetchType.EAGER)
   private List<Doc> docs;

并在Doc类中尝试添加以下内容:

 @ManyToOne(optional=false)
 @JoinColumn(name="doctype",referencedColumnName="iddoc")
   private Person person;

这应该是实现您需要的行为的正确方法,而不是100%确定。这是另一个解释如何实现您需要的解决方案的链接:

https://en.wikibooks.org/wiki/Java_Persistence/OneToMany

 类似资料:
  • 我正在使用Spring4.0为RESTfulWeb服务创建POC。如果我们只传递字符串或任何其他基本数据类型,它就可以正常工作。 这个很好用。但如果我想将字节流或文件对象传递给函数,我如何编写具有这些参数的函数?我如何编写提供传递字节流的客户端? 我尝试了这个代码,但是得到了415个错误。 客户端代码-使用apache HttpClient

  • 我试图理解Spring MVC Restful架构。想知道有多少种方法可以将SpringMVC与RESTfulWeb服务集成在一起。我可以看到其中一个是使用Rest模板。 这是在Spring MVC中使用rest Web服务的唯一方法吗? 我们可以单独使用SpringMVC开发web应用程序而不使用任何web服务吗。 如果我说错了,请指正。 谢谢你的帮助。

  • 我使用Spring云Spring服务连接器连接CloudFoundry上的Rabbitmq服务。 但我需要声明一个CachingConnectionFactory并将其PublisherConfirms设置为true。因为我们需要使用PublisherConfig在向队列发送消息时检查确认。我不知道如何注入从cloud spring服务连接器获得的connectionFactory。或者我们如何处

  • 我正在编写一个junit测试用例来测试rest调用。 我试图嘲笑售票服务,它工作正常,但当我在REST服务调用中嘲笑它时。它不嘲笑。 我正在使用springboot,mongodb与REST。 有什么解决这个问题的建议吗? }

  • 我正在用java编写代码(使用Azure SDK for java),我有一个包含会话消息的服务总线队列。我想接收这些消息并将它们处理到另一个地方。 我使用QueueClient连接到队列,然后使用registerSessionHandler处理消息(下面的代码)。 问题是,每当收到消息时,我都可以打印有关它的所有详细信息,包括内容,但它会打印10次,每次之后都会打印一个异常。(打印10次:我理解

  • 我的SpringBoot应用程序通过REST HTTP调用外部服务,并通过客户端和方法实现。 到目前为止,客户机接收的始终是字符串主体->。前一段时间,我们调用的服务返回HTTP 202,但没有body,因此抛出以下异常: 。