簡體   English   中英

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

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

持久保存對象列表的最佳方法是什么? 我將JavaEE 7與JPA結合使用。 對象B也是一個實體。

我的模特

@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>();
    }
}

我的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?
    }
}

我更喜歡的是我的objectList數據庫表如下所示:

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

您的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>(); } } 

這將在您的A類和B類之間建立關系。

正確遵循以下鏈接給出的示例。 它將幫助您了解JPA一對多關系。 :)

我發現這很容易。

ObjectA模型

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

JPA電話

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

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 中? 如何查詢List類型的屬性 <String> 在JPA 如何使用JPA保留復雜的嵌套對象 使用jpa持久化(或查找)對象不會保存它封裝的對象列表 用jpa在對象中保留一個對象 如何堅持使用JPA的枚舉? 如何使用 JPA 持久化 LocalDate? 如何使用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> JPA在ManyToOne關系中持久化對象
 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM