来自数据库的 Netbeans 向导实体 类,并非所有表都已映射
Netbeans wizard Entity Classes from Database, not all tables mapped
我使用此向导从我的数据库创建实体 classes。有些 table 没有转化为 class,但是有一些属性可以识别关系。
this is my db ERD (mysql)
这是用户实体class(属性)
@Entity
@Table(name = "user")
@XmlRootElement
@NamedQueries({
@NamedQuery(name = "User.findAll", query = "SELECT u FROM User u"),
@NamedQuery(name = "User.findByOid", query = "SELECT u FROM User u WHERE u.oid = :oid"),
@NamedQuery(name = "User.findByUsername", query = "SELECT u FROM User u WHERE u.username = :username"),
@NamedQuery(name = "User.findByPassword", query = "SELECT u FROM User u WHERE u.password = :password"),
@NamedQuery(name = "User.findByEmail", query = "SELECT u FROM User u WHERE u.email = :email"),
@NamedQuery(name = "User.findByAddress", query = "SELECT u FROM User u WHERE u.address = :address"),
@NamedQuery(name = "User.findBySince", query = "SELECT u FROM User u WHERE u.since = :since")})
public class User implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Basic(optional = false)
@Column(name = "oid")
private Integer oid;
@Basic(optional = false)
@NotNull
@Size(min = 1, max = 15)
@Column(name = "username")
private String username;
@Basic(optional = false)
@NotNull
@Size(min = 1, max = 15)
@Column(name = "password")
private String password;
// @Pattern(regexp="[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?", message="Invalid email")//if the field contains email address consider using this annotation to enforce field validation
@Basic(optional = false)
@NotNull
@Size(min = 1, max = 30)
@Column(name = "email")
private String email;
@Size(max = 50)
@Column(name = "address")
private String address;
@Basic(optional = false)
@NotNull
@Column(name = "since")
@Temporal(TemporalType.DATE)
private Date since;
@JoinTable(name = "favorite", joinColumns = {
@JoinColumn(name = "user_oid", referencedColumnName = "oid")}, inverseJoinColumns = {
@JoinColumn(name = "wheelchair_oid", referencedColumnName = "oid")})
@ManyToMany
private List<Wheelchair> wheelchairList;
@ManyToMany(mappedBy = "userList1")
private List<Wheelchair> wheelchairList1;
@OneToMany(cascade = CascadeType.ALL, mappedBy = "senderOid")
private List<Comment> commentList;
@JoinColumn(name = "role_oid", referencedColumnName = "oid")
@ManyToOne(optional = false)
private Role roleOid;
@OneToMany(cascade = CascadeType.ALL, mappedBy = "userOid")
private List<Orthopedy> orthopedyList;
public User() {
}
...
我有点不明白:
OWN 连接 table 在哪里?
为什么我有 userList1 和 wheelchairList1?它应该识别自己的 table 吗?在这种情况下,我可以在此处重命名,还是必须在某些 xml 文件中重命名?
为什么
@OneToMany(cascade = CascadeType.ALL, mappedBy = "userOid")
private List<Orthopedy> orthopedyList;
?
应该是一对一...
此外,“来自实体 class 的 JSF”向导创建 CRUD 操作来管理用户,我如何管理加入 table?我需要在控制器中写一些东西吗?
你能link给我一些我可以学习这个的资源吗?
非常感谢
在创建实体时,它会为所有 Table 主键创建 类
但不适用于具有多对多关系的 table。它由它们的父级管理 类 它作为列表维护。
这是我的代码,用于管理我的多对多 table 学科学院,其中包含教师和学科的详细信息
正在为教师分配科目
public void assignFacultyToSubject(String facultyUname, Integer subjectId) {
try {
Subject oSubject = em.find(Subject.class, subjectId);
Faculty oFaculty = em.find(Faculty.class, facultyUname);
College oCollege = em.find(College.class, oFaculty.getCollegeUname().getCollegeUname());
List<Faculty> lstFaculty = oSubject.getFacultyList();
List<Subject> lstSubject = oFaculty.getSubjectList();
if (!lstSubject.contains(oSubject)) {
lstFaculty.add(oFaculty);
lstSubject.add(oSubject);
oSubject.setFacultyList(lstFaculty);
oFaculty.setSubjectList(lstSubject);
em.merge(oSubject);
em.getEntityManagerFactory().getCache().evictAll();
} else {
System.out.println("Entry Already Found");
}
} catch (Exception e) {
System.out.println("Error :- " + e.getMessage());
}
}
从多对多中删除主题和教师详细信息Table
@Override
public void removeFacultySubject(String facultyUname, Integer subjectId) {
try {
Subject oSubject = em.find(Subject.class, subjectId);
Faculty oFaculty = em.find(Faculty.class, facultyUname);
List<Subject> lstSubject = oFaculty.getSubjectList();
List<Faculty> lsFaculty = oSubject.getFacultyList();
lstSubject.remove(oSubject);
lsFaculty.remove(oFaculty);
em.merge(oSubject);
} catch (Exception e) {
System.out.println("Error :- " + e.getMessage());
}
}
我使用此向导从我的数据库创建实体 classes。有些 table 没有转化为 class,但是有一些属性可以识别关系。
this is my db ERD (mysql)
这是用户实体class(属性)
@Entity
@Table(name = "user")
@XmlRootElement
@NamedQueries({
@NamedQuery(name = "User.findAll", query = "SELECT u FROM User u"),
@NamedQuery(name = "User.findByOid", query = "SELECT u FROM User u WHERE u.oid = :oid"),
@NamedQuery(name = "User.findByUsername", query = "SELECT u FROM User u WHERE u.username = :username"),
@NamedQuery(name = "User.findByPassword", query = "SELECT u FROM User u WHERE u.password = :password"),
@NamedQuery(name = "User.findByEmail", query = "SELECT u FROM User u WHERE u.email = :email"),
@NamedQuery(name = "User.findByAddress", query = "SELECT u FROM User u WHERE u.address = :address"),
@NamedQuery(name = "User.findBySince", query = "SELECT u FROM User u WHERE u.since = :since")})
public class User implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Basic(optional = false)
@Column(name = "oid")
private Integer oid;
@Basic(optional = false)
@NotNull
@Size(min = 1, max = 15)
@Column(name = "username")
private String username;
@Basic(optional = false)
@NotNull
@Size(min = 1, max = 15)
@Column(name = "password")
private String password;
// @Pattern(regexp="[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?", message="Invalid email")//if the field contains email address consider using this annotation to enforce field validation
@Basic(optional = false)
@NotNull
@Size(min = 1, max = 30)
@Column(name = "email")
private String email;
@Size(max = 50)
@Column(name = "address")
private String address;
@Basic(optional = false)
@NotNull
@Column(name = "since")
@Temporal(TemporalType.DATE)
private Date since;
@JoinTable(name = "favorite", joinColumns = {
@JoinColumn(name = "user_oid", referencedColumnName = "oid")}, inverseJoinColumns = {
@JoinColumn(name = "wheelchair_oid", referencedColumnName = "oid")})
@ManyToMany
private List<Wheelchair> wheelchairList;
@ManyToMany(mappedBy = "userList1")
private List<Wheelchair> wheelchairList1;
@OneToMany(cascade = CascadeType.ALL, mappedBy = "senderOid")
private List<Comment> commentList;
@JoinColumn(name = "role_oid", referencedColumnName = "oid")
@ManyToOne(optional = false)
private Role roleOid;
@OneToMany(cascade = CascadeType.ALL, mappedBy = "userOid")
private List<Orthopedy> orthopedyList;
public User() {
}
...
我有点不明白: OWN 连接 table 在哪里? 为什么我有 userList1 和 wheelchairList1?它应该识别自己的 table 吗?在这种情况下,我可以在此处重命名,还是必须在某些 xml 文件中重命名? 为什么
@OneToMany(cascade = CascadeType.ALL, mappedBy = "userOid")
private List<Orthopedy> orthopedyList;
? 应该是一对一...
此外,“来自实体 class 的 JSF”向导创建 CRUD 操作来管理用户,我如何管理加入 table?我需要在控制器中写一些东西吗?
你能link给我一些我可以学习这个的资源吗?
非常感谢
在创建实体时,它会为所有 Table 主键创建 类 但不适用于具有多对多关系的 table。它由它们的父级管理 类 它作为列表维护。
这是我的代码,用于管理我的多对多 table 学科学院,其中包含教师和学科的详细信息
正在为教师分配科目
public void assignFacultyToSubject(String facultyUname, Integer subjectId) {
try {
Subject oSubject = em.find(Subject.class, subjectId);
Faculty oFaculty = em.find(Faculty.class, facultyUname);
College oCollege = em.find(College.class, oFaculty.getCollegeUname().getCollegeUname());
List<Faculty> lstFaculty = oSubject.getFacultyList();
List<Subject> lstSubject = oFaculty.getSubjectList();
if (!lstSubject.contains(oSubject)) {
lstFaculty.add(oFaculty);
lstSubject.add(oSubject);
oSubject.setFacultyList(lstFaculty);
oFaculty.setSubjectList(lstSubject);
em.merge(oSubject);
em.getEntityManagerFactory().getCache().evictAll();
} else {
System.out.println("Entry Already Found");
}
} catch (Exception e) {
System.out.println("Error :- " + e.getMessage());
}
}
从多对多中删除主题和教师详细信息Table
@Override
public void removeFacultySubject(String facultyUname, Integer subjectId) {
try {
Subject oSubject = em.find(Subject.class, subjectId);
Faculty oFaculty = em.find(Faculty.class, facultyUname);
List<Subject> lstSubject = oFaculty.getSubjectList();
List<Faculty> lsFaculty = oSubject.getFacultyList();
lstSubject.remove(oSubject);
lsFaculty.remove(oFaculty);
em.merge(oSubject);
} catch (Exception e) {
System.out.println("Error :- " + e.getMessage());
}
}