我正在使用Spring MVC实现一个Web应用程序。在我的应用程序中,我需要实现一个通知服务。这是通知的数据库表。
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。这可以是单个用户,也可以是多个用户。这取决于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;
......
我不清楚如何在这里实现一对多关系。我希望mysql查询在上述条件下是准确的。请帮帮我。
编辑:
如果NotificationType = SINGLE_USER,我需要只向一个用户发送通知。如果NotificationType = MULTIPLE_USER我需要向多个用户发送通知。
答案 0 :(得分:1)
在表架构中,您可以定义多对一关系。
@ManyToOne
@JoinColumn(name="userId")
private User user;
如果NotificationType = SINGLE_USER,我需要只向一个用户发送通知。如果NotificationType = MULTIPLE_USER我需要向多个用户发送通知。
在这种情况下,您应该创建另一个结构。
例如
CREATE USER (
...,
notification_id,
...
)
class Notification {
@OneToMany
@JoinColumn(name="notification_id")
private User user;
}
或者你可以创建新表,它只保存notification_id和user_id:
CREATE USER_NOTIFICATION (
user_id,
notification_id
)
然后
class Notification {
@ManyToMany
@JoinTable(
name="USER_NOTIFICATION",
joinColumns=@JoinColumn(name="USER_ID", referencedColumnName="ID"),
inverseJoinColumns=@JoinColumn(name="NOTIFICATION_ID",
referencedColumnName="ID"))
private List<User> users;
}
如何使用NotificationType连接此数据?
通知表中有列类型。如何发送通知 - 这是您的业务逻辑。为此,您不需要使用表结构。如果您愿意,可以创建触发器,这将检查您在USER_NOTIFICATION中插入新(notification_id,user_id)时的逻辑。