2012-03-15 6 views
0

Я создаю приложение на основе JPA, используя mysql и ecliselink. У меня очень странная проблема при попытке вставить материал в мою базу данных. Я могу вставлять данные в одну таблицу, но когда дело доходит до одно- может и наоборот что-то пойдет не так. В настоящее время у меня есть 2 основные и 1 справочная таблица (она содержит внешние ключи двух других таблиц). Это странно, потому что у меня нет «последовательности» в моей таблице базы данных. Когда я пытаюсь вставить данные в любой из моих таблиц я получаю это исключение:JPA/MySql issue

[EL Info]: 2012-03-15 17:52:28.64--ServerSession(18621340)--EclipseLink, version: Eclipse Persistence Services - 2.3.2.v20111125-r10461 
[EL Info]: 2012-03-15 17:52:29.23--ServerSession(18621340)--file:/D:/git-eclipse/Martin/reference/build/classes/_reference login successful 
[EL Warning]: 2012-03-15 17:52:29.389--ClientSession(31843177)--Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.3.2.v20111125-r10461): org.eclipse.persistence.exceptions.DatabaseException 
Internal Exception: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Table 'eclipse1.sequence' doesn't exist 
Error Code: 1146 
Call: UPDATE SEQUENCE SET SEQ_COUNT = SEQ_COUNT + ? WHERE SEQ_NAME = ? 
bind => [2 parameters bound] 
Query: DataModifyQuery(name="SEQUENCE" sql="UPDATE SEQUENCE SET SEQ_COUNT = SEQ_COUNT + ? WHERE SEQ_NAME = ?") 

Internal Exception: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Table 'eclipse1.sequence' doesn't exist 
Error Code: 1146 
Call: UPDATE SEQUENCE SET SEQ_COUNT = SEQ_COUNT + ? WHERE SEQ_NAME = ? 
bind => [2 parameters bound] 
Query: DataModifyQuery(name="SEQUENCE" sql="UPDATE SEQUENCE SET SEQ_COUNT = SEQ_COUNT + ? WHERE SEQ_NAME = ?") 
[EL Info]: 2012-03-15 17:52:29.394--ServerSession(18621340)--file:/D:/git-eclipse/Martin/reference/build/classes/_reference logout successful 
Exception in thread "main" java.lang.IllegalStateException: Attempting to execute an operation on a closed EntityManager. 
at org.eclipse.persistence.internal.jpa.EntityManagerImpl.verifyOpen(EntityManagerImpl.java:1665) 
at org.eclipse.persistence.internal.jpa.EntityManagerImpl.close(EntityManagerImpl.java:1529) 
at OneToManyRelation.main(OneToManyRelation.java:47) 

Я отправляю один класс только потому, что другие очень похожи

@Entity 

    @Table(name="category") 

    public class Category { 

    @Id 
    @GeneratedValue(strategy=GenerationType.AUTO) 
    @Column(name="CategoryID") 
    private int CategoryID; 

/** 
* @return the id 
*/ 
public int getId() { 
return CategoryID; 
} 

/** 
* @param id the id to set 
*/ 
public void setId(int CategoryID) { 
this.CategoryID = CategoryID; 
} 

@Column(name="category", nullable=false, length=50, insertable=true) 
private String category; 

/** 
* @return the category 
*/ 
public String getCategory() { 
return category; 
} 


public void setCategory(String category) { 
this.category = category; 
} 

@OneToMany(cascade=CascadeType.ALL) 
@JoinTable(name = "templateemail", joinColumns = { 
@JoinColumn(name="categoryId", unique = true) 
}, 
inverseJoinColumns = { 
@JoinColumn(name="templateId") 
} 
) 
private Set<Template> template; 

/** 
* 
*/ 
public Set<Template> getChildren() { 
return template; 
} 

/** 
* 
*/ 
public void setChildren(Set<Template> template) { 
this.template = template; 
} 

} 

Вы не знаете, что не так с моим кодом?

Заранее спасибо

+0

нужен код, пожалуйста, и спасибо – Woot4Moo

+0

@Martin Я боюсь, что вы опубликовали не ваш код. Итак, как мы можем сказать, что с ним не так? –

+0

Извините, ребята, я здесь совсем новый, я сделаю все возможное, чтобы улучшить свои вопросы. –

ответ

2

Проводы код поможет найти то, что случилось с ним. Но, судя только по сообщению об ошибке, кажется, вы решили использовать генератор последовательности или таблицы и что этот генератор полагается (по умолчанию) на таблицу с именем sequence, которая не существует в базе данных.

Создайте эту таблицу или настройте генератор для использования существующей таблицы или измените генератор идентификаторов.

+0

вот мой класс –

+0

Мой ответ такой же. создать требуемую таблицу или настроить генератор, который делает то, что вы хотите. Вы, кажется, надеетесь, что JPA будет генерировать идентификаторы для вас без какого-либо поля последовательности, таблицы или автоинкремента в базе данных. Выберите нужную стратегию и создайте необходимые таблицы и/или столбцы в базе данных для поддержки этой стратегии. –

+1

@ JBNizet - это правильно. В документах EclipseLink говорится: «Указание стратегии AUTO позволяет EclipseLink выбрать стратегию для использования. Обычно EclipseLink выбирает TABLE как стратегию, поскольку она является самой переносимой стратегией. Однако, когда указано AUTO, генерация схемы должна использоваться по крайней мере один раз, чтобы таблица по умолчанию была создана в базе данных ». (Http://wiki.eclipse.org/EclipseLink/Examples/JPA/PrimaryKey) – madth3