Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java eclipselink jpa实体在数据库中不作为表显示_Java_Jpa_Eclipselink - Fatal编程技术网

Java eclipselink jpa实体在数据库中不作为表显示

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

我试图使用eclipselink jpa使测试项目正常工作,但每次尝试在数据库中持久化Poll对象时,我都遇到了一个棘手的问题。例如,它适用于用户类对象。我想,我可能有很多注释的问题。 因此,我有四个实体类:

民意测验

@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;