UniqueConstraint funktioniet nicht!!

sahili

Mitglied
Hallo zusammen,
ich arbeite mit Eclipse und Hibernate und Spring.
anscheinend funktionieren die UniqueConstraint Definitionen nicht also(@Column(nullable=false)) und @UniqueConstraint(columnNames={"instanceName", "applicationclass_id
Ich habe folgenden Klassen: application und und applicationClass:


Java:
@Entity
@Table(name="easyarc_user.conf_application",
uniqueConstraints = {@UniqueConstraint(columnNames={"instanceName", "applicationclass_id"})} )
publicclass Application implements IEntity {
// serial version uid
private static final long serialVersionUID = 560026188195706118L;
// 
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Integer id=0;
@Column(nullable=false)
private String instanceName;
//
@OneToOne (fetch = FetchType.EAGER, cascade=CascadeType.ALL)
private ApplicationClass applicationClass;

public Application () {

}

@Entity
@Table (name="easyarc_user.conf_applicationclass",
uniqueConstraints = {@UniqueConstraint(columnNames={"name", "description"})} )
public class ApplicationClass implements IEntity {
// serializable
private static final long serialVersionUID = -2154315136708213840L;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Integer id;
@Column
private String name;
@Column
private String description;

public ApplicationClass() {

}

/**
*
*/

XML:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schem...-beans-2.0.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schem...ng-aop-2.0.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schem...ing-tx-2.0.xsd" >

Hier sind die Einstellungen der DAOs:

<bean id="entityManagerFactory"
class="org.springframework.orm.jpa.LocalEntityManagerFactoryBean">
<property name="persistenceUnitName" value="userContext" />
</bean>

<bean id="applicationDao" class="de.seg.ea.config.server.dao.jpa.JpaApplicationDao">
<property name="entityManagerFactory"
ref="entityManagerFactory" />
</bean>

<bean id="applicationClassDao" class="de.seg.ea.config.server.dao.jpa.JpaApplicationClassDao">
<property name="entityManagerFactory"
ref="entityManagerFactory" />
</bean>

<bean id="jpaTransactionManager"
class="org.springframework.orm.jpa.JpaTransactionManager">
<property name="entityManagerFactory" ref="entityManagerFactory" />
</bean>
<tx:advice id="txAdvice"
transaction-manager="jpaTransactionManager">
<tx:attributes>
<tx:method name="*" propagation="REQUIRED" />
</tx:attributes>
</tx:advice>
<aop:config>
<aopointcut id="daoMethods"
expression="execution(* de.seg.ea.config.server.dao.*Dao.*(..))" />
<aop:advisor advice-ref="txAdvice"
pointcut-ref="daoMethods" />
</aop:config>
</beans>
 
Zuletzt bearbeitet von einem Moderator:
Hm... und wie sieht jetzt die Fehlermeldung aus? Stacktrace? SO langsam brauchen wir mal ein Postingtemplate für Supportanfragen ;) Tom?

Ach so, kannst du vielleicht noch den Code den du da gepostet hast etwas formatieren? SO liest man sich ja blöd... ;) Danke
 
Keine Fehlermeldung, aber in die Tabelle kann doppelte Einträge gespeichert werden, was ich mit meiner Definition(uniqueConstraints = {@UniqueConstraint(columnNames={"instanceName", "applicationclass) vermeiden wollte!!
 
Danke für die Formatierung ;). Bin kein JPA Experte, aber muss die UniqueConstraint Annotation nicht extra stehen? Du hast die Momentan recht komisch in die @Table reingeschachtelt.

Btw. darf ich mir die Bemerkung erlauben, dass so vollkommen verannotierte Domänenklassen unheimlich hässlich sind? ;)

Gruß
Ollie
 
Nein, die Verschachtelung ist schon richtig so, hab das bei mir genaus gemacht und eben getestet, es liegt ein Unique Constraint auf der den Spalten.

Was für eine Datenbank verwendest Du? Hier hab ich MySQL mit InnoDB (heißen die so? Ich komm eher aus der Oraclewelt).

Gruß
 
Jap, das ist noch ein guter Hinweis. In der Xampp Standard installation ist MySQL auf das Arbeiten mit MyIsam eingestellt und unterstützt in den tabellen somit weder transaktionen noch Constraints. Es gibt da irgendeine ini Datei in der man "ingore innodb" oder so auskommentieren muss. Vielleicht isses das?

REINHAUN!
 
Um auf InnoDB umzustellen hab ich in meinem persistence-unit folgendes drin:

Code:
<property name="hibernate.dialect"
				value="org.hibernate.dialect.MySQLInnoDBDialect" />
 
Das reicht nicht. Wenn deine DB nicht eingestellt so ist, dass InnoDB unterstützt wird, läuft alles auf MyIsam - ohne eine Fehlermeldung. Allerdings ohne Transaktionen, ohne Constraints. Deine JPA Konfiguration ist "nur" hinweis - kein Funktionalitätsan- oder -ausschalter.

Am einfachsten überprüfen kannst du das per phpMyAdmin oder irgendeinem anderen MySQL Administrationstool. Schau dir einfach den Typ der Tabelle an. Ich geh davon aus, da steht MyIsam und nicht InnoDB ;)

REINHAUN!
 
Da hab ich wohl Glück gehabt ;-)

Da ich keine Ahnung vom MySQL hab, dachte ich das reicht. Und hier bei mir unter Ubuntu hats wohl auch gereicht, hab eben nachgeschaut. Kann mich auch nicht erinnern, beim Anlegen der DB da extra was eingestellt zu haben..

Gruß und danke für den Hinweis
Torax
 

Neue Beiträge

Zurück