繁体   English   中英

如何使用Hibernate JPA批注仅创建一条记录

[英]How can i create only one record with Hibernate JPA Annotation

我有3个实体。 它们是:Tweet,线程和媒体。 我正在使用Hibernate JPA注释。 当我保存一个Thread对象时,它必须触发鸣叫,并且必须像线程一样自动保存tweet,当然必须保存Tweet的“ media”。

您可以看到我的实体类,如下所示。 现在,我正在研究Thread之间的Tweet。 当我使用这些代码时,正在记录的线程数与tweet对象一样多。 但是我希望线程内有一条记录

保存线程后,进程必须像这样:

  1. 将新记录添加到线程表。 (仅一行)
  2. 将所有tweet添加到tweet表中(“ threadid”列的所有内容相同,因为这些tweet仅属于一个线程!)
  3. 将所有媒体添加到媒体表(所有“ tweetid”列均相同

鸣叫表:

@Entity
@Table(name = "tbl_tweet")
public class Tweet implements Serializable {

    @Id
    @GeneratedValue
    private long id;
    @Column(name = "tweetid")
    private String tweetID;
    private String parentTweetID;
    private String avatar;
    private String owner_name;
    private String owner_nick;
    private String content;
    private String sent_time;
    private String sent_date;
    private String retweet_count;
    private String like_count;
    private String owner_link;

    @ManyToOne(cascade = CascadeType.ALL)
    @JoinColumn(name="threadid")
    private Thread thread;

    @OneToMany(mappedBy = "tweet",fetch = FetchType.LAZY,cascade = {CascadeType.PERSIST,CascadeType.MERGE})
    private List<Media> mediaURLs;

线程表:

@Entity
@Table(name = "tbl_thread")
public class Thread implements Serializable {
        @Id
        @GeneratedValue
        private Long id;
        @Column(name = "threadid")
        private String threadID;

        @Transient
        private List<Tweet> listOfTweets;

媒体表:

@Entity
@Table(name = "tbl_media")
public class Media implements Serializable {
    @Id
    @GeneratedValue
    private long id;
    private String mediaID;
    private String mediaType;
    private String mediaUrl;
    private String mediaUrlHttps;
    private String mediaVideoUrl;

    @ManyToOne
    @JoinColumn(name = "tweetid")
    private Tweet tweet;

我的预期和实际结果: http : //prntscr.com/mkaul5

我改变了方式。 目前运作良好。 注释万岁!

鸣叫表:

@Entity
@Table(name = "tbl_tweet")
public class Tweet implements Serializable {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private long id;
    @Column(unique = true,nullable = false,name = "tweetID")
    private String tweetID;
    private String parentTweetID;
    private String avatar;
    private long owner_id;
    private String owner_name;
    private String owner_nick;
    private String content;
    private String sent_time;
    private String sent_date;
    private String retweet_count;
    private String like_count;
    @Transient
    private String quotedTweetHtml;
    @Transient
    @JoinColumn(name = "threadid",referencedColumnName = "id")
    private Thread thread;


    @OneToMany(cascade = CascadeType.PERSIST,fetch = FetchType.EAGER)
    @JoinColumn(name = "tweetID")
    private List<Media> mediaURLs;

线程表:

@Entity
@Table(name = "tbl_thread")
public class Thread implements Serializable {
        @Id
        @GeneratedValue
        private Long id;
        @Column(name = "threadid")
        private String threadID;
        @OneToMany(cascade = CascadeType.PERSIST,fetch = FetchType.EAGER)
        @JoinColumn(name = "threadid")
        private List<Tweet> listOfTweets;

媒体表:

@Entity
@Table(name = "tbl_media")
public class Media implements Serializable {
    @Id
    @GeneratedValue
    private long id;
    private String mediaID;
    private String mediaType;
    private String mediaUrl;
    private String mediaUrlHttps;
    private String mediaVideoUrl;
    @Transient
    @JoinColumn(name = "tweetID")
    private Tweet tweet;

暂无
暂无

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

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM