2017-09-19 3 views
0

私はSpring MVCを使用してWebアプリケーションを実装しています。私のアプリケーションでは、通知サービスを実装する必要があります。ここに通知のデータベーステーブルがあります。Spring MVC:1対多の関係でデータを処理しますか?

CREATE TABLE `notification` (
    `id` bigint(20) NOT NULL AUTO_INCREMENT, 
    PRIMARY KEY (`id`), 
    `message` varchar(100), 
    `dateAndTime` time DEFAULT NULL, 
    `read` tinyint(1) NOT NULL DEFAULT '0', 
    `notificationType` int(11) DEFAULT NULL, 
    `userId` bigint(20), 
    FOREIGN KEY (`userId`) REFERENCES `application_user` (`id`) 
); 

ここで、userIdは、通知を送信するユーザーのIDです。これは、1人のユーザーでも複数のユーザーでもかまいません。これはnotificationTypeの値に依存します。ここに私がこれについて書いたドメインモーダルがあります。

@Entity 
@Table(name = "notification") 
public class Notification { 
@Id 
@GeneratedValue(strategy= GenerationType.IDENTITY) 
private Long id; 

private String message; 

@DateTimeFormat(pattern = "yy-MM-dd-hh-mm") 
private Date dateAndTime; 

private boolean read; 

public static enum NotificationType{ 
    SINGLE_USER, MULTIPLE_USER 
} 

//@OneToMany 
//@JoinColumn(name="type") 
//private User user; 

ApplicationUser applicationUser; 

private NotificationType notificationType = NotificationType.SINGLE_USER; 
...... 

ここでは1対多の関係を実装する方法が明確ではありません。私はmysqlクエリが上記の条件で正確であることを願っています。これで私を助けてください。

編集:

NotificationTypeを= SINGLE_USERの場合、私は一人のユーザに通知を送信する必要があります。 NotificationType = MULTIPLE_USERの場合は、複数のユーザーに通知する必要があります。

+0

ManyToMany関係が必要です。多くの通知は多くのユーザーを参照できます。 – Kayaman

答えて

1

テーブルスキーマでは、多対1の関係を定義します。

@ManyToOne 
@JoinColumn(name="userId") 
private User user; 

NotificationTypeを= SINGLE_USERの場合、私は一人のユーザに通知を送信する必要があります。 NotificationType = MULTIPLE_USERの場合は、複数のユーザーに通知する必要があります。

この場合、別の構造を作成する必要があります。例えば

のみnotification_id保存されます

CREATE USER (
    ..., 
    notification_id, 
    ... 
) 

class Notification { 
    @OneToMany 
    @JoinColumn(name="notification_id") 
    private User user; 
} 

それとも、新しいテーブルを作成することができ、およびUSER_ID:

CREATE USER_NOTIFICATION (
    user_id, 
    notification_id 
) 

そして、私は接続するにはどうすればよい、その後

class Notification { 
    @ManyToMany 
    @JoinTable(
     name="USER_NOTIFICATION", 
     [email protected](name="USER_ID", referencedColumnName="ID"), 
     [email protected](name="NOTIFICATION_ID", 
     referencedColumnName="ID")) 
    private List<User> users; 
} 

このデータはNotificationType?

通知テーブルに列タイプがあります。どのように通知を送信するのか - それはあなたのビジネスロジックです。このためには、テーブル構造で行う必要はありません。あなたがUSER_NOTIFICATIONに新しい(notification_id、user_id)を挿入する際のあなたのロジックをチェックするトリガーを作成できたらいいですか?

+0

このデータをNotificationTypeに接続するにはどうすればよいですか? – sndu

関連する問題