Как я могу создать только одну запись с Hibernate JPA Annotation - PullRequest
0 голосов
/ 13 февраля 2019

У меня есть 3 лица.Это: Tweet, Thread и Media.Я использую Hibernate JPA Аннотации.Когда я сохраняю один объект Thread, он должен вызывать твит, и автоматически твит должен сохраняться как нить, а «медиа» твита, конечно, должны сохраняться.

Вы можете видеть мой класс сущностей, как показано ниже.Сейчас я работаю над Tweet beetween Thread.Когда я использую этот код, количество потоков записывается столько же, сколько объект твит.Но я хочу, чтобы только одна запись в потоке .

Процесс должен быть таким после сохраненного потока :

  1. добавить новую записьЗарезервировать таблицу.(только одна строка)
  2. добавить все твиты в таблицу твитов (все столбцы «threadid» одинаковые , поскольку эти твиты принадлежат только одному потоку!)
  3. добавить все медиа втаблица мультимедиа (все из столбца «tweetid» то же )

Tweet Table:

@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

1 Ответ

0 голосов
/ 17 февраля 2019

Я изменил таким образом.Сейчас это работает хорошо.Да здравствуют аннотации!

Tweet Table:

@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;

Thread Thread:

@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;

Media Table:

@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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...