Java eclipselink jpa实体在数据库中不作为表显示
我试图使用eclipselink jpa使测试项目正常工作,但每次尝试在数据库中持久化Poll对象时,我都遇到了一个棘手的问题。例如,它适用于用户类对象。我想,我可能有很多注释的问题。 因此,我有四个实体类: 民意测验Java eclipselink jpa实体在数据库中不作为表显示,java,jpa,eclipselink,Java,Jpa,Eclipselink,我试图使用eclipselink jpa使测试项目正常工作,但每次尝试在数据库中持久化Poll对象时,我都遇到了一个棘手的问题。例如,它适用于用户类对象。我想,我可能有很多注释的问题。 因此,我有四个实体类: 民意测验 @Entity @Table(name = "Polls") public class Poll implements Serializable { private static final long serialVersionUID = 1L; @Id @GeneratedV
@Entity
@Table(name = "Polls")
public class Poll implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
private String title;
@Temporal(TemporalType.TIMESTAMP)
private Date expirationDate;
private String description;
private boolean expired;
private boolean show = false;
@OneToMany(cascade = CascadeType.ALL, mappedBy = "poll")
private List<Option> options;
@ManyToMany(cascade = CascadeType.ALL, mappedBy = "polls")
@JoinTable(name = "POLL_USER")
private List<User> users;
public Poll() {
}
public Poll(String title, Date expirationDate, String description,
boolean expired, boolean show) {
super();
this.title = title;
this.expirationDate = expirationDate;
this.description = description;
this.expired = expired;
this.show = show;
}
public Poll(String title, Date expirationDate, String description,
boolean expired, boolean show, List<Option> options,
List<User> users) {
super();
this.title = title;
this.expirationDate = expirationDate;
this.description = description;
this.expired = expired;
this.show = show;
this.options = options;
this.users = users;
}
用户类
@Entity
@Table(name = "Users")
public class User implements Serializable {
/**
*
*/
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
private String login;
private Long groupId;
private String email;
@ManyToMany
private List<Poll> polls;
@OneToMany(cascade = CascadeType.ALL, mappedBy = "user")
private List<Vote> votes;
public User() {
super();
}
public User(String login, Long groupId, String email) {
super();
this.login = login;
this.groupId = groupId;
this.email = email;
}
public User(String login, Long groupId, String email, List<Poll> polls,
List<Vote> votes) {
super();
this.login = login;
this.groupId = groupId;
this.email = email;
this.polls = polls;
this.votes = votes;
}
这是我的persistence.xml文件:
<persistence-unit name="company" transaction-type="RESOURCE_LOCAL">
<class>logic.Poll</class>
<class>logic.Option</class>
<class>logic.Vote</class>
<class>logic.User</class>
<properties>
<property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver" />
<property name="javax.persistence.jdbc.url"
value="jdbc:mysql://localhost:3306/eclipselink_example" />
<property name="javax.persistence.jdbc.user" value="" />
<property name="javax.persistence.jdbc.password" value="" />
<property name="eclipselink.logging.level" value="FINEST" />
<property name="eclipselink.logging.file" value="output.log" />
<property name="eclipselink.logging.logger" value="JavaLogger" />
<!-- EclipseLink should create the database schema automatically -->
<property name="eclipselink.ddl-generation" value="create-and-drop-tables" />
<property name="eclipselink.ddl-generation.output-mode"
value="database" />
</properties>
</persistence-unit>
逻辑民意测验
逻辑。选项
逻辑,投票
逻辑用户
编译后,我在db中有五个表:
选项、顺序、用户、用户和投票。我不明白,投票表在哪里。
很抱歉这么多信,希望你能帮我。谢谢。在你的Poll.java中试试这个
@ManyToMany
@JoinTable(name = "poll_user", joinColumns =
@JoinColumn(name = "poll_id", referencedColumnName = "id"), inverseJoinColumns =
@JoinColumn(name = "user_id", referencedColumnName = "id"))
private List<User> users;
@ManyToMany(mappedBy = "users")
private List<Poll> polls;
@manytomy
@JoinTable(name=“poll\u user”,JointColumns=
@JoinColumn(name=“poll\u id”,referencedColumnName=“id”),inverseJoinColumns=
@JoinColumn(name=“user\u id”,referencedColumnName=“id”))
私人名单用户;
在您的User.java中
@ManyToMany
@JoinTable(name = "poll_user", joinColumns =
@JoinColumn(name = "poll_id", referencedColumnName = "id"), inverseJoinColumns =
@JoinColumn(name = "user_id", referencedColumnName = "id"))
private List<User> users;
@ManyToMany(mappedBy = "users")
private List<Poll> polls;
@ManyToMany(mappedBy=“users”)
私人名单投票;
另外,不要忘记为变量设置getter和setter
修订版
首先,我会改变所有的:
@GeneratedValue(策略=GenerationType.SEQUENCE)
致:
@GeneratedValue(策略=GenerationType.IDENTITY)
我会检查您在Mysql中没有保留字的变量
例如:
在Poll.java中,您有:
私有布尔显示
但是SHOW是MySQL中的一个保留字我认为,这将有助于解决您的ID生成问题。如果您使用@GeneratedValue(strategy=GenerationType.AUTO)
它取决于数据库。祝你好运
尽可能多地,GenerationType.TABLE
,它将是独立的数据库我已经实现了所有getter、setter、hash()、equals()和toString()方法,只是没有在这里编写它来保存位置。我如您所说的那样做了,现在我有以下错误:内部异常:com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:表'eclipselink_example.SEQUENCE'不存在错误代码:1146调用:更新序列集SEQ_COUNT=SEQ_COUNT+?其中SEQ_NAME=?bind=>[2个参数绑定]查询:DataModifyQuery(name=“SEQUENCE”sql=“UPDATE SEQUENCE SET SEQ\u COUNT=SEQ\u COUNT+?WHERE SEQ\u name=?”)我不知道,为什么程序需要这个序列表呢?这个错误是关于你的表序列在尝试更新时不存在,我在你的持久性中看不到它。xmlI有表序列每次我使用jpa时,它是存储有@GeneratorValue id实体的id键的表。这张表是由eclipselink生成的,不是我生成的,嗯?我从未见过JPA创建一个我没有在持久性上指定的表,或者@GeneratedValue(strategy=GenerationType.AUTO)注释基本上是告诉实体id的注释,不应该创建单独的id表?尝试使用@GeneratedValue(strategy=GenerationType.IDENTITY)而不是GenerationType.AUTO
@ManyToMany(mappedBy = "users")
private List<Poll> polls;