2016-08-10 5 views
0

Ich habe zwei Tabellen eine Konfiguration und eine Tabelle Organisation wie folgt:Hibernate Entity OneToOne mit gleichen Primär- und Fremdschlüssel Bidirektionale Beziehung

T_Organization 
ID (Primary Key) 
Name 
Address 

T_Configuration 
Organization_ID (Primary_Key and Foreign Key) 
Name 
Some Configs 

Ich habe erfolgreich eine unidirektionale Beziehung von der Konfigurationseinheit hinzugefügt, indem Sie:

Ich versuche jedoch, eine Elementvariable innerhalb der Entität der Organisation hinzuzufügen, so dass ich auf Konfigurationswerte aus dem Objekt Organisation zugreifen kann.

Ich versuche:

@OneToOne 
@PrimaryKeyJoinColumn 
private ConfigurationEntity organizationId; 

aber ich die folgende Ausnahme beim Start immer:

[talledLocalContainer] Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column 'this_.organizationId' in 'field list' 
[talledLocalContainer] at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) ~[?:1.7.0_79] 
[talledLocalContainer] at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57) ~[?:1.7.0_79] 
[talledLocalContainer] at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) ~[?:1.7.0_79] 
[talledLocalContainer] at java.lang.reflect.Constructor.newInstance(Constructor.java:526) ~[?:1.7.0_79] 
[talledLocalContainer] at com.mysql.jdbc.Util.handleNewInstance(Util.java:400) ~[mysql-connector-java-5.1.36.jar:5.1.36] 
[talledLocalContainer] at com.mysql.jdbc.Util.getInstance(Util.java:383) ~[mysql-connector-java-5.1.36.jar:5.1.36] 
[talledLocalContainer] at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:980) ~[mysql-connector-java-5.1.36.jar:5.1.36] 
[talledLocalContainer] at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3847) ~[mysql-connector-java-5.1.36.jar:5.1.36] 
[talledLocalContainer] at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3783) ~[mysql-connector-java-5.1.36.jar:5.1.36] 
[talledLocalContainer] at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2447) ~[mysql-connector-java-5.1.36.jar:5.1.36] 
[talledLocalContainer] at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2594) ~[mysql-connector-java-5.1.36.jar:5.1.36] 
[talledLocalContainer] at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2545) ~[mysql-connector-java-5.1.36.jar:5.1.36] 
[talledLocalContainer] at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1901) ~[mysql-connector-java-5.1.36.jar:5.1.36] 
[talledLocalContainer] at com.mysql.jdbc.PreparedStatement.executeQuery(PreparedStatement.java:2002) ~[mysql-connector-java-5.1.36.jar:5.1.36] 
[talledLocalContainer] at com.mchange.v2.c3p0.impl.NewProxyPreparedStatement.executeQuery(NewProxyPreparedStatement.java:404) ~[c3p0-0.9.5-pre10.jar:0.9.5-pre10] 
[talledLocalContainer] at org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.extract(ResultSetReturnImpl.java:82) ~[hibernate-core-4.3.11.Final.jar:4.3.11.Final] 
[talledLocalContainer] ... 61 more 

fand ich die Lösung hier http://websystique.com/hibernate/hibernate-one-to-one-unidirectional-with-shared-primary-key-annotation-example/

Irgendwelche Vorschläge auf, warum ich sehe Dies?

Bearbeiten von Dateien enthalten:

Organization.java

@SuppressWarnings("serial") 
@Entity 
@Table(name="t_organization") 
@Cache(usage = CacheConcurrencyStrategy.READ_WRITE) 
@DynamicUpdate 
@Indexed 
@Data 
public class Organization implements Serializable{ 
    @DocumentId 
    @Id @GeneratedValue @Column(name="id") 
    private long id; 
    @Column(name="name") 
    private String name; 
    @Column(name="address") 
    private String address; 
} 

ConfigurationEntity.java

@SuppressWarnings("serial") 
@Entity 
@Table(name = "t_configuration") 
@Cache(usage = CacheConcurrencyStrategy.READ_WRITE) 
@DynamicUpdate 
@Data 
public class Configuration implements Serializable { 
    @Id 
    @OneToOne(cascade = CascadeType.ALL) 
    @JoinColumn(name = "organization_id", referencedColumnName="id") 
    Organization id; 

    @Column(name = "name") 
    String name; 
} 

Edit: Edit: Lösung: Organization.java

@SuppressWarnings("serial") 
@Entity 
@Table(name="t_organization") 
@Cache(usage = CacheConcurrencyStrategy.READ_WRITE) 
@DynamicUpdate 
@Indexed 
@Data 
public class Organization implements Serializable{ 
    @DocumentId 
    @Id @GeneratedValue @Column(name="id") 
    private long id; 
    @Column(name="name") 
    private String name; 
    @Column(name="address") 
    private String address; 

     @Getter 
@Setter 
@OneToOne(mappedBy="organization", fetch = FetchType.LAZY, orphanRemoval=true) 
private ConfigurationEntity configurationEntity; 
} 

ConfigurationEntity.java

@SuppressWarnings("serial") 
@Entity 
@Table(name = "t_configuration") 
@Cache(usage = CacheConcurrencyStrategy.READ_WRITE) 
@DynamicUpdate 
@Data 
public class Configuration implements Serializable { 
@Id 
@Column(name="organizations_id") 
@GeneratedValue(generator="gen") 
@GenericGenerator(name="gen", strategy="foreign",[email protected](name="property", value="organization")) 
long id; 

@OneToOne 
@PrimaryKeyJoinColumn 
private Organization organization; 

@Column(name = "name") 
String name; 
} 
+0

können Sie beide Dateien erstellen, die die Einheit definiert. –

+0

@PerakTiwari Ich habe die Dateien – Dan

+0

enthalten Sie haben zwei Einheiten: 'Configuration' und' Organisation', aber mit 'SamlIdentityProviderConfigModel organizationId' als' OneToOne'. Ihre Frage ist nicht klar: Wo ist 'SamlIdentityProviderConfigModel'? – ujulu

Antwort

1

Jedoch habe ich innerhalb der Organisation des Unternehmens eine Membervariable hinzufügen versuchen so, dass ich Konfigurationswerte aus dem Organisationsobjekt zugreifen kann.

Um dies zu tun, was Sie tun müssen, ist die Eins-zu-Eins-Beziehung bidirektional zu machen, wie folgt:

public class Organization implements Serializable{ 
    @Id @GeneratedValue @Column(name="id") 
    private long id; 

    private String name; 
    private String address; 

    @OneToOne(mappedBy = "id") 
    private Configuration configuration; 

    // getters + setters 
} 
+0

Danke, damit konnte ich zu einer Lösung kommen, die für mich funktioniert hat. Wird die Frage mit der Lösung aktualisieren, mit der ich gegangen bin. – Dan

Verwandte Themen