简体   繁体   English

如何持久保存列表类型的属性 <Object> 在JPA中?

[英]How to persist a property of type List<Object> in JPA?

What is the best way to get a List with Objects persisted? 持久保存对象列表的最佳方法是什么? I'm using JavaEE 7 with JPA. 我将JavaEE 7与JPA结合使用。 Object B is also an Entity. 对象B也是一个实体。

My Model 我的模特

@Entity
public class ObjectA implements Serializable {

    @Id @GeneratedValue
    private Long id;

    // What should I use here?
    private List<ObjectB> objectList;

    public ObjectA () {
        this.objectList = new ArrayList<ObjectB>();
    }
}

My JPA Calls 我的JPA电话

@Stateless
@JPA
public class ObjectJPA{

    @PersistenceContext(unitName = "ObjectProjectPU")
    private EntityManager em;

    // How can I insert a record in the table for objectList here?
    public void insertIntoObjectList(ObjectB objectB) {
        em.persist(objectB); // This must be wrong?
    }
}

What I prefer is that my database table for objectList would look like this: 我更喜欢的是我的objectList数据库表如下所示:

id (ObjectA_id) | objectB_id     or    id | ObjectA_id | objectB_id

Your ObjectA class should look like below. 您的ObjectA类应如下所示。

 @Entity public class ObjectA implements Serializable { @Id @GeneratedValue private Long id; // What should I use here? private List<ObjectB> objectList; @OneToMany(mappedBy = "objectB_id") public List<ObjectB> getObjectList() { return objectList; } public void setObjectList(List<ObjectB> listOfObjetB) { this.objectList = listOfObjetB; } public ObjectA () { this.objectList = new ArrayList<ObjectB>(); } } 

This will create a relation between your class A and B. 这将在您的A类和B类之间建立关系。

Follow the example given to the below link properly. 正确遵循以下链接给出的示例。 It will help you to understand the JPA one to many relationship. 它将帮助您了解JPA一对多关系。 :) :)

I figured out that it was pretty easy. 我发现这很容易。

ObjectA Model ObjectA模型

@OneToMany
@JoinTable
(
    name="OBJECTA_OBJECTB",
    joinColumns={ @JoinColumn(name="ID", referencedColumnName="ID") },
    inverseJoinColumns={ @JoinColumn(name="OBJECTB_ID", referencedColumnName="ID") }
)
private List<ObjectB> objectList;

JPA CALL JPA电话

public void insertIntoObjectList(ObjectB object) {
    object.setSomeDataInObjectList(list); // just a random list here
    em.persist(object); 
}

ObjectB Model ObjectB模型

@ManyToOne
ObjectA objectA;

列表中的 findBy 属性<object> SpringBoot JPA 存储库<div id="text_translate"><p>我的数据库 Story 和 Tag 中的两个对象之间存在一对多关系。</p><p> 我希望能够获取所有带有标签 object 和字符串名称的 Story 对象。</p><p> 故事.java</p><pre> @Entity @Table(name = "stories") public class Story { @Id @GeneratedValue private Long id; @Column(name = "title") private String title; @JsonIgnoreProperties({"story"}) @OneToMany(mappedBy = "story", fetch = FetchType.LAZY) private List&lt;Tag&gt; tags; public Story(String title){ this.title = title; } public Story(){ } // getters &amp; setters }</pre><p> 标签.java</p><pre> @Entity @Table(name = "tags") public class Tag { @Id @GeneratedValue private Long id; @Column(name = "name") private String name; @JsonIgnoreProperties({"tags"}) @ManyToOne @JoinColumn(name = "story_id", nullable = false) @Cascade(org.hibernate.annotations.CascadeType.SAVE_UPDATE) private Story story; public Tag(String name, Story story){ this.name = name; this.story = story; } public Tag(){ } /// getters &amp; setters }</pre><p> StoryController.java</p><pre> @RestController public class StoryController { @Autowired StoryRepository storyRepository; @CrossOrigin(origins = "http://localhost:8080/api") @GetMapping(value = "/stories") public ResponseEntity&lt;List&lt;Story&gt;&gt; getAllStories(){ return new ResponseEntity&lt;&gt;(storyRepository.findAll(), HttpStatus.OK); } @CrossOrigin(origins = "http://localhost:8080/api") @GetMapping(value="/stories/tagSearch/{name}") public ResponseEntity&lt;Story&gt; getStoryByTag(@PathVariable String name) { return new ResponseEntity(storyRepository.findByTags_Name(name), HttpStatus.OK); } @CrossOrigin(origins = "http://localhost:8080/api") @GetMapping(value="/stories/{id}") public ResponseEntity&lt;Story&gt; getStory(@PathVariable Long id) { return new ResponseEntity(storyRepository.findById(id), HttpStatus.OK); } }</pre><p> StoryRepository.java</p><pre> @Repository public interface StoryRepository extends JpaRepository&lt;Story, Long&gt; { public List&lt;Story&gt; findByTags_Name(String name); }</pre><p> 尝试通过浏览器查询时,转到地址 localhost:8080/api/stories/tagSearch/?name="tag" 数据库返回数据库中的所有对象,而不是我要查找的结果。</p></div></object> - findBy property in List<Object> SpringBoot JPA Repository

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 如何持久化 List 类型的属性<String>在 JPA 中? - How to persist a property of type List<String> in JPA? 如何查询List类型的属性 <String> 在JPA - How to query a property of type List<String>in JPA 如何使用JPA保留复杂的嵌套对象 - How to persist a complicated, nested object with JPA 使用jpa持久化(或查找)对象不会保存它封装的对象列表 - Persist (or find) an object with jpa does not save the list of object that it encapsulates 用jpa在对象中保留一个对象 - Persist an object within an object with jpa 如何坚持使用JPA的枚举? - How to persist an enum with JPA? 如何使用 JPA 持久化 LocalDate? - How to persist LocalDate with JPA? 如何使用JPA保留具有单个类型的多个字段的实体? - How to persist an entity with multiple fields of a single type using JPA? 列表中的 findBy 属性<object> SpringBoot JPA 存储库<div id="text_translate"><p>我的数据库 Story 和 Tag 中的两个对象之间存在一对多关系。</p><p> 我希望能够获取所有带有标签 object 和字符串名称的 Story 对象。</p><p> 故事.java</p><pre> @Entity @Table(name = "stories") public class Story { @Id @GeneratedValue private Long id; @Column(name = "title") private String title; @JsonIgnoreProperties({"story"}) @OneToMany(mappedBy = "story", fetch = FetchType.LAZY) private List&lt;Tag&gt; tags; public Story(String title){ this.title = title; } public Story(){ } // getters &amp; setters }</pre><p> 标签.java</p><pre> @Entity @Table(name = "tags") public class Tag { @Id @GeneratedValue private Long id; @Column(name = "name") private String name; @JsonIgnoreProperties({"tags"}) @ManyToOne @JoinColumn(name = "story_id", nullable = false) @Cascade(org.hibernate.annotations.CascadeType.SAVE_UPDATE) private Story story; public Tag(String name, Story story){ this.name = name; this.story = story; } public Tag(){ } /// getters &amp; setters }</pre><p> StoryController.java</p><pre> @RestController public class StoryController { @Autowired StoryRepository storyRepository; @CrossOrigin(origins = "http://localhost:8080/api") @GetMapping(value = "/stories") public ResponseEntity&lt;List&lt;Story&gt;&gt; getAllStories(){ return new ResponseEntity&lt;&gt;(storyRepository.findAll(), HttpStatus.OK); } @CrossOrigin(origins = "http://localhost:8080/api") @GetMapping(value="/stories/tagSearch/{name}") public ResponseEntity&lt;Story&gt; getStoryByTag(@PathVariable String name) { return new ResponseEntity(storyRepository.findByTags_Name(name), HttpStatus.OK); } @CrossOrigin(origins = "http://localhost:8080/api") @GetMapping(value="/stories/{id}") public ResponseEntity&lt;Story&gt; getStory(@PathVariable Long id) { return new ResponseEntity(storyRepository.findById(id), HttpStatus.OK); } }</pre><p> StoryRepository.java</p><pre> @Repository public interface StoryRepository extends JpaRepository&lt;Story, Long&gt; { public List&lt;Story&gt; findByTags_Name(String name); }</pre><p> 尝试通过浏览器查询时,转到地址 localhost:8080/api/stories/tagSearch/?name="tag" 数据库返回数据库中的所有对象,而不是我要查找的结果。</p></div></object> - findBy property in List<Object> SpringBoot JPA Repository JPA在ManyToOne关系中持久化对象 - JPA persist object in a ManyToOne relationship
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM