我是JPA的新手...
我在MySQL 5数据库中预先存在以下表:
这些关系作为一对多基数映射到App和User之间的User\u App\u Bridge表(顾名思义,是一个桥)。
E-R图:
用户<--pl hd--0/><--pl hd--2/><--pl hd--1/>应用程序
1个用户与User\u App\u Bridge表中的许多应用程序关联。
1个应用程序与User\u App\u Bridge表中的许多用户关联。
User\u App\u Bridge表的DDL:
CREATE TABLE `User_App_Bridge` (
`User_App_Bridge_Id` int(11) NOT NULL AUTO_INCREMENT,
`User_Id` int(11) NOT NULL,
`App_Id` int(11) NOT NULL,
PRIMARY KEY (`User_App_Bridge_Id`),
KEY `App_Id` (`App_Id`),
KEY `User_Id` (`User_Id`),
CONSTRAINT `user_app_bridge_ibfk_1` FOREIGN KEY (`App_Id`) REFERENCES `App` (`App_Id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
假设我有以下映射到这些表的JPA注释类:
@Entity
public class App {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "App_Id")
private long appId;
@OneToMany
@JoinTable
(
name = "UserAppBridge",
joinColumns = { @JoinColumn(name="App_Id", referencedColumnName = "App_Id") },
inverseJoinColumns = { @JoinColumn(name="User_Id", referencedColumnName = "User_Id") }
)
private List<User> users;
@Column(name = "App_Name")
private String appName;
// Getters & Setter methods
}
@Entity
public class User {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "User_Id")
private long userId;
@OneToMany
@JoinTable
(
name = "UserAppBridge",
joinColumns = { @JoinColumn(name="User_Id", referencedColumnName = "User_Id") },
inverseJoinColumns = { @JoinColumn(name="App_Id", referencedColumnName = "App_Id", unique = true) }
)
private List<App> apps;
@Column(name = "User_Name")
private String userName;
// Getters & Setter methods
}
@Entity
public class UserAppBridge {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "User_App_Bridge_Id")
private long userAppBridgeId;
@Column(name = "User_Id")
private long userId;
@Column(name = "App_Id")
private long appId;
// Getters & Setter methods
}
问题:
>
这(@JoinTable内的块)是使用UserAppBridge为用户和应用程序实体进行一对多映射的正确方法吗?
在@JoinTable中应该列
在inverseJoinColumns代码中,unique=true是否有必要(它的用途是什么)?
我是否需要在UserAppBridge类中执行任何其他操作(用于连接到应用程序和用户)?
感谢您抽出时间阅读此。。。
您的问题答案:
1.不,不是。您需要在User和UserAppBridge之间创建oneTo多国映射,以及App和UserAppBridge之间的oneTo多国映射。这是代码:
在用户实体中:
@OneToMany(mappedBy = "user")
private Set<UserAppBridge> userAppBridgeSet;
应用内实体:
@OneToMany(mappedBy = "app")
private Set<UserAppBridge> userAppBridgeSet;
在UserAppBridge实体中:
@Entity
@IdClass(UserAppBridgeId.class)
public class UserAppBridge{
@Id
@Column(name = "User_App_Bridge_Id")
private long userAppBridgeId;
@Id
@Column(name = "User_Id")
private long userId;
@Id
@Column(name = "App_Id")
private long appId;
@ManyToOne
@PrimaryKeyJoinColumn(name="User_Id", referencedColumnName="User_Id")
private User user;
@ManyToOne
@PrimaryKeyJoinColumn(name="App_Id", referencedColumnName="App_Id")
private App app;
// Getters & Setter methods
}
在UserAppBridgeId类中:
public class UserAppBridgeId{
private long userAppBridgeId;
private int userId;
private int appId;
// Getters & Setter methods
}
有关如何创建高级多对多关系的更多信息,请参阅wiki链接
它应该是一个SQL名称
有了“unique=true”,你就是在强迫一个伴侣的关系,没有“unique=true”,这将是很多的关系。
说明:下面是一段代码:
@OneToMany
@JoinTable{
//Here should be the table name and not the entity name
name = "User_App_Bridge",
joinColumns = { @JoinColumn(name="User_Id", referencedColumnName = "User_Id") },
inverseJoinColumns = { @JoinColumn(name="App_Id", referencedColumnName = "App_Id", unique = true) }
}
private List<App> apps;
如果有一个唯一=真属性,映射表只能有唯一的App_id(相同的App_id不能在映射表中出现一次),而它可以有任何User_id(相同的User_id可以在映射表中出现一次)。这意味着一个User_id可能分配了更多App_id,而一个App_id可能只分配了一个User_id。因此,您强制建立一对多关系。
本文向大家介绍VMware设置桥接上网(图文详解),包括了VMware设置桥接上网(图文详解)的使用技巧和注意事项,需要的朋友参考一下 环境:主机Win7、VMware Workstation 6.5.3、虚拟机Ubuntu10.04。 一、桥接的基本原理 配置成桥接网络连接模式的虚拟机就当作主机所在以太网的一部分,虚拟系统和宿主机器的关系,就像连接在同一个Hub上的两台电脑,可以像主机一样可以访
桥接(Bridge) Intent 将抽象与实现分离开来,使它们可以独立变化。 Class Diagram Abstraction:定义抽象类的接口 Implementor:定义实现类接口 Implementation RemoteControl 表示遥控器,指代 Abstraction。 TV 表示电视,指代 Implementor。 桥接模式将遥控器和电视分离开来,从而可以独立改变遥控器或者电
我已经做了什么: > 在Weblogic 11g节点上配置的JMS服务器 配置的外部服务器-AMQ连接工厂和绑定到本地JNDI的源队列对象(OK:Conn.工厂和队列对象可见于服务器JNDI树中) 用默认道具创建JMS桥(好吧-我想) 使用默认配置为目标目的地(Weblogic)创建了桥接目的地--在可能的情况下(OK:部署了资源适配器) 为源目标(AMQ)创建了桥接目标-JNDI属性,在可能的情
问题内容: 该EclipseLink的文件说,我需要在我的pom.xml与Maven得到它下面的条目: 但是当我尝试使用注释时,NetBeans告诉我,找不到该类。确实如此:Eclipselink的javax.persistence包中没有Entity类。 我必须如何使用Maven设置Eclipselink? 问题答案: 该工件不提供JPA 2.0 API ,您需要添加: 为了简单起见,我建议使用
目前,我们使用JNDI的Tomcat配置基于这一建议,该建议目前正在发挥作用。 如何使用JMS和JNDI连接到WebSphere MQ(MQ系列)服务器? 由于我们正在升级到v8,我想利用JMS 2.0特性。这需要将jar文件更新到JMS 2.0版本。 因此,我从tomcat lib文件夹中删除了以下JAR。 com。ibm。mq。jar 用这些罐子代替了它们。根据这个链接 com。ibm。mq。