gpt4 book ai didi

java - Hibernate:一对多和继承,表未创建

转载 作者:行者123 更新时间:2023-12-01 12:31:58 25 4
gpt4 key购买 nike

我在两个类之间创建了一对多关系芯片(实际上有效)。但是,一旦我添加扩展了其中一个类的第二个类,该表就不再创建。我不明白为什么。

简短地说:A 类与 C 类建立一对多关系,B 类扩展了 A 类

@Entity
@Table(name = "PRODUCT")
@Inheritance(strategy=InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name="discriminator",discriminatorType=DiscriminatorType.STRING )
@DiscriminatorValue(value="P")
public class Product{

@Id
@GeneratedValue
@Column(name = "PRODUCT_ID")
private int productID;

@Column(name = "ARTICLE_NUMBER")
private String articleNumber;

@Column(name = "DESCRIPTION")
private String description;

@Column(name = "TITLE")

@ManyToOne(cascade = {CascadeType.ALL})
@JoinColumn(name="MANUFACTURER_TITLE")
private Manufacturer manufacturer;

//Constructor, getter and setter
}

子类:

@Entity
@Table(name="PRODUCT")
@DiscriminatorValue("E")
public class Service extends Product{

@Column(name = "INTERVAL")
private int interval;

@Column(name = "UNITS")
private String units;
//Constructor, getter and setter
}

关系芯片:

@Entity
@Table(name = "MANUFACTURER")
public class Manufacturer implements Serializable {

@Id
@Column(name = "MANUFACTURER_TITLE")
private String title;

@OneToMany(mappedBy="manufacturer")
private Set<Product> products;
//Constructor, getter and setter
}

映射:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<property name="hibernate.bytecode.use_reflection_optimizer">false</property>
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/testshop</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.connection.password"/>
<property name="hibernate.c3p0.min_size">5</property>
<property name="hibernate.c3p0.max_size">20</property>
<property name="hibernate.c3p0.timeout">1500</property>
<property name="hibernate.c3p0.max_statements">50</property>
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
<!--Autocreate Tables-->
<!--property name="hibernate.archive.autodetection" value="class"/-->
<property name="hibernate.hbm2ddl.auto">create</property>
<!--Debug show sql-->
<property name="show_sql">true</property>
<!--Character Encoding for Using UTF-8 to use german special characters-->
<property name="hibernate.connection.CharSet">utf8</property>
<property name="hibernate.connection.characterEncoding">utf8</property>
<property name="hibernate.connection.useUnicode">true</property>
<!--Entity to be mapped-->
<!--Caching for performance-->
<property name="hibernate.cache.provider_class">
org.hibernate.cache.EhCacheProvider
</property>
<mapping class="test.Department"/>
<mapping class="test.Person"/>
<mapping class="test.Employee"/>
<mapping class="main.ShopConfig"/>
<mapping class="main.Logging"/>
<mapping class="product.Product"/>
<mapping class="product.Service"/>
<mapping class="manufacturer.Manufacturer"/>

</session-factory>
</hibernate-configuration>

一旦我添加服务类的映射,它就不再起作用了..

编辑:如果我删除一对多关系芯片,则会创建表..但为什么?!

编辑2: hibernate 错误:

    16-09-2014 10:55:14 ERROR SchemaExport:425 - HHH000389: Unsuccessful: create table PRODUCT      (discriminator varchar(31) not null, PRODUCT_ID integer not null auto_increment, ARTICLE_NUMBER         varchar(255), DESCRIPTION varchar(255), END_DATE tinyblob, PRICE double precision, PUBLISHED bit,       QUANTITY integer, START_DATE tinyblob, TITLE varchar(255), UNLIMITED bit, WEIGHT varchar(255),      INTERVAL integer, UNITS varchar(255), MANUFACTURER_TITLE varchar(255), primary key (PRODUCT_ID))
10705 [http-bio-8080-exec-12] ERROR org.hibernate.tool.hbm2ddl.SchemaExport - HHH000389: Unsuccessful: create table PRODUCT (discriminator varchar(31) not null, PRODUCT_ID integer not null auto_increment, ARTICLE_NUMBER varchar(255), DESCRIPTION varchar(255), END_DATE tinyblob, PRICE double precision, PUBLISHED bit, QUANTITY integer, START_DATE tinyblob, TITLE varchar(255), UNLIMITED bit, WEIGHT varchar(255), INTERVAL integer, UNITS varchar(255), MANUFACTURER_TITLE varchar(255), primary key (PRODUCT_ID))

16-09-2014 10:55:14 ERROR SchemaExport:426 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'INTERVAL integer, UNITS varchar(255), MANUFACTURER_TITLE varchar(255), primary k' at line 1
10706 [http-bio-8080-exec-12] ERROR org.hibernate.tool.hbm2ddl.SchemaExport - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'INTERVAL integer, UNITS varchar(255), MANUFACTURER_TITLE varchar(255), primary k' at line 1

最佳答案

问题出在“间隔”字段上。它是MySql中的保留字。将其更改为其他内容。

关于java - Hibernate:一对多和继承,表未创建,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25864025/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com