2016-05-28 3 views
1

私はUserとCompetenciaという2つのクラスを持っています。私はそれらの間に関係を作りたいが、それは動作しません。参照:Active Jdbc Associationは動作しません

public class User extends Model{ 

} 

@Table(value = "competencias") 
@BelongsTo(foreignKeyName = "user_id", parent = User.class) 
public class Competencia extends Model{ 

} 
CREATE TABLE competencias(
    id INTEGER NOT NULL DEFAULT NEXTVAL('competencias_id_seq'::regclass), 
    mes CHARACTER(2) NOT NULL, 
    ano CHARACTER(4) NOT NULL, 
    created_at DATE NOT NULL DEFAULT now(), 
    user_id INTEGER NOT NULL, 
    ativo BOOLEAN, 
    CONSTRAINT pk_competencia PRIMARY KEY (id), 
    CONSTRAINT fk_competencia_operador FOREIGN KEY (user_id) REFERENCES public.users (id) MATCH SIMPLE ON UPDATE CASCADE ON DELETE NO ACTION, 
    CONSTRAINT uk_mes_ano UNIQUE (mes, ano) 
) 

CREATE TABLE users(
    id INTEGER NOT NULL DEFAULT NEXTVAL('operadores_id_seq'::regclass), 
    nome CHARACTER VARYING(25) NOT NULL, 
    email CHARACTER VARYING(100) NOT NULL, 
    senha CHARACTER VARYING(120) NOT NULL, 
    nivel INTEGER NOT NULL DEFAULT 4, 
    ativo BOOLEAN, 
    created_at DATE DEFAULT now(), 
    nome_completo CHARACTER VARYING(60) NOT NULL, 
    CONSTRAINT pk_operadores PRIMARY KEY (id), 
    CONSTRAINT unique_login UNIQUE (nome) 
); 

エラーメッセージ:

Exception in thread "AWT-EventQueue-0" org.javalite.activejdbc.associations.NotAssociatedException: No association from table 'competencias' to table 'users' 

完全なスタックトレース:メソッドの

Exception in thread "AWT-EventQueue-0" org.javalite.activejdbc.associations.NotAssociatedException: No association from table 'competencias' to table 'users' 
at org.javalite.activejdbc.Model.add(Model.java:2421) 

Exception in thread "AWT-EventQueue-0" org.javalite.activejdbc.associations.NotAssociatedException: No association from table 'competencias' to table 'users' 
at org.javalite.activejdbc.Model.add(Model.java:2421) 
at ui.DialogCompetencia.btSalvarActionPerformed(DialogCompetencia.java:261) 
at ui.DialogCompetencia.access$800(DialogCompetencia.java:23) 
at ui.DialogCompetencia$10.actionPerformed(DialogCompetencia.java:224) 
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2022) 
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2348) 
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402) 
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259) 
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252) 
at java.awt.AWTEventMulticaster.mouseReleased(AWTEventMulticaster.java:289) 
at java.awt.Component.processMouseEvent(Component.java:6535) 
at javax.swing.JComponent.processMouseEvent(JComponent.java:3324) 
at java.awt.Component.processEvent(Component.java:6300) 
at java.awt.Container.processEvent(Container.java:2236) 
at java.awt.Component.dispatchEventImpl(Component.java:4891) 
at java.awt.Container.dispatchEventImpl(Container.java:2294) 
at java.awt.Component.dispatchEvent(Component.java:4713) 
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4888) 
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4525) 
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4466) 
at java.awt.Container.dispatchEventImpl(Container.java:2280) 
at java.awt.Window.dispatchEventImpl(Window.java:2750) 
at java.awt.Component.dispatchEvent(Component.java:4713) 
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:758) 
at java.awt.EventQueue.access$500(EventQueue.java:97) 
at java.awt.EventQueue$3.run(EventQueue.java:709) 
at java.awt.EventQueue$3.run(EventQueue.java:703) 
at java.security.AccessController.doPrivileged(Native Method) 
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:76) 
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:86) 
at java.awt.EventQueue$4.run(EventQueue.java:731) 
at java.awt.EventQueue$4.run(EventQueue.java:729) 
at java.security.AccessController.doPrivileged(Native Method) 
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:76) 
at java.awt.EventQueue.dispatchEvent(EventQueue.java:728) 
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201) 
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116) 
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:109) 
at java.awt.WaitDispatchSupport$2.run(WaitDispatchSupport.java:184) 
at java.awt.WaitDispatchSupport$4.run(WaitDispatchSupport.java:229) 
at java.awt.WaitDispatchSupport$4.run(WaitDispatchSupport.java:227) 
at java.security.AccessController.doPrivileged(Native Method) 
at java.awt.WaitDispatchSupport.enter(WaitDispatchSupport.java:227) 
at java.awt.Dialog.show(Dialog.java:1084) 
at java.awt.Component.show(Component.java:1673) 
at java.awt.Component.setVisible(Component.java:1625) 
at java.awt.Window.setVisible(Window.java:1014) 
at java.awt.Dialog.setVisible(Dialog.java:1005) 
at ui.Menu.jMenuItem2ActionPerformed(Menu.java:207) 
at ui.Menu.access$100(Menu.java:11) 
at ui.Menu$2.actionPerformed(Menu.java:99) 
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2022) 
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2348) 
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402) 
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259) 
at javax.swing.AbstractButton.doClick(AbstractButton.java:376) 
at javax.swing.plaf.basic.BasicMenuItemUI.doClick(BasicMenuItemUI.java:833) 
at javax.swing.plaf.basic.BasicMenuItemUI$Handler.mouseReleased(BasicMenuItemUI.java:877) 
at java.awt.Component.processMouseEvent(Component.java:6535) 
at javax.swing.JComponent.processMouseEvent(JComponent.java:3324) 
at java.awt.Component.processEvent(Component.java:6300) 
at java.awt.Container.processEvent(Container.java:2236) 
at java.awt.Component.dispatchEventImpl(Component.java:4891) 
at java.awt.Container.dispatchEventImpl(Container.java:2294) 
at java.awt.Component.dispatchEvent(Component.java:4713) 
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4888) 
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4525) 
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4466) 
at java.awt.Container.dispatchEventImpl(Container.java:2280) 
at java.awt.Window.dispatchEventImpl(Window.java:2750) 
at java.awt.Component.dispatchEvent(Component.java:4713) 
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:758) 
at java.awt.EventQueue.access$500(EventQueue.java:97) 
at java.awt.EventQueue$3.run(EventQueue.java:709) 
at java.awt.EventQueue$3.run(EventQueue.java:703) 
at java.security.AccessController.doPrivileged(Native Method) 
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:76) 
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:86) 
at java.awt.EventQueue$4.run(EventQueue.java:731) 
at java.awt.EventQueue$4.run(EventQueue.java:729) 
at java.security.AccessController.doPrivileged(Native Method) 
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:76) 
at java.awt.EventQueue.dispatchEvent(EventQueue.java:728) 
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201) 
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116) 
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105) 
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101) 
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93) 
at java.awt.EventDispatchThread.run(EventDispatchThread.java:82) 

コード:私は「

User user = User.findById(usuario.getId()); 
Competencia competencia = new Competencia(); 
competencia.set("id", id); 
competencia.set("mes", String.format("%02d", comboMes.getSelectedIndex())); 
competencia.set("ano", comboAno.getSelectedItem().toString()); 
competencia.set("ativo", checkAtivo.isSelected()); 
**competencia.add(user);** 
if(competencia.isValid()){ 
    if(competencia.saveIt()){ 
    Functions.informacao("Competencia gravada"); 
    labelCodigo.setText(String.format("%04d", competencia.getId())); 
    preparaForm("salvar"); 
    } 
}else{ 
    String message = showInfo(competencia); 
    JOptionPane.showMessageDialog(this, message, "Corrija os erros abaixo:", JOptionPane.ERROR_MESSAGE);  
} 
+1

ここにコードを直接貼り付けます。便利なコード表示ツールがあります。 –

+0

モデルのコードとテーブルの構造を追加してください – ipolevoy

+0

OK、クラスコードが追加されました、ありがとう –

答えて

2

あなたが規則に従っているため

@BelongsTo(foreignKeyName = "user_id", parent = User.class)

:あなたは、ログ出力を提供しなかったので、本当の問題は、ですが、あなたのモデルCompetenciaが注釈を持たないべきか、まだ分かりません。さらに、有用な情報があるので、最初の行ではなくスタックトレース全体を含めてください。

UPDATE:

あなたのテーブル構造によれば、あなたは1人のユーザーが多くのCompetenciasを持って、一対多の関係を、持っています。

ただし、competenciaに多くのユーザーを追加する:Competenciaユーザーを持っていない

competencia.add(user);

、それは周りの他の方法です!ユーザーには多くの競技会があります。このコードは動作します:他の言葉で

user.add(competencia);

は、あなたが親/子関係を逆転させました。

+0

はい、この注釈は存在します(上記を参照)。 –

+0

あなたはそれを持ってはいけません。アノテーションを削除し、完全なスタックトレースとログを含めます。 – ipolevoy

+0

メモの削除後にスタックトレースが表示される –

関連する問題