我有这些桌子:
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,这很容易理解。但是如何实现我需要的行为呢?
@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;
看到这个链接了吗?
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,因此抛出以下异常: 。