私はmavenとJBOSSでJPAを処理する初心者ですが、Restfulでアプリケーションを作成すると、DEPLOYを実行して次の問題が発生しました
Caused by: javax.persistence.PersistenceException: [PersistenceUnit: com.company.test_resources_war_1.0-SNAPSHOTPU] Unable to build EntityManagerFactory
Caused by: org.hibernate.MappingException: Repeated column in mapping for entity: database.Photo column: fid_module (should be mapped with insert = \ "false \" update = \ "false \") "}}
そのステップではなく、すべてのposlesソリューションを確認しますが、何も見つかりませんでした。誰かが私を助けてくれますか?
前もって感謝します
以下に、私が持っているpostgresのSQLコードを示し、マッピングを行いました。
3つのテーブル(アクティビティ、イベントおよび写真)があり、そのうちの1つ(写真)が他のテーブルを参照しています2(activity and event)が1つの列にある(photo.fid_module)
SQLコード(engineデータベース-> Postgresql):
CREATE TABLE activity (
id_activity integer not null,
name character varying(150),
description text,
CONSTRAINT id_activity_pk PRIMARY KEY (id_activity)
)
CREATE TABLE event (
id_event integer not null,
name character varying(150),
description text,
date timestamp without time zone,
CONSTRAINT id_event_pk PRIMARY KEY (id_event)
)
CREATE TABLE photo(
id_photo integer not null,
path character varying(150),
fid_module integer not null,
CONSTRAINT id_photo_pk PRIMARY KEY (id_photo),
CONSTRAINT fk_photo_activity FOREIGN KEY (fid_module)
REFERENCE activity (id_activity) MATCH SIMPLE
ON UPDATE NO ACTION ON DELETE NO ACTION,
CONSTRAINT fk_photo_event FOREIGN KEY (fid_module)
REFERENCE event (id_event) MATCH SIMPLE
ON UPDATE NO ACTION ON DELETE NO ACTION
)
次に、Netbenasを使用してマッピングを行い、次のコードを提供しました(3つのテーブルのマッピングを行いましたが、問題はクラスPhoto.Javaにあります)。
@Entity
@Table(name = "photo")
@XmlRootElement
@NamedQueries({
@NamedQuery(name = "photo.findAll", query = "SELECT p FROM Photo p"),
@NamedQuery(name = "photo.findByFidPhoto", query = "SELECT p FROM Photo p WHERE p.fidphoto = :fidphoto"),
@NamedQuery(name = "photo.findByIdPhoto", query = "SELECT p FROM Photo p WHERE p.idphoto = :idphoto")})
public class Photo implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Basic(optional = false)
@Column(name = "id_photo")
private Integer idPhoto;
@Column(name = "path")
private Recurso fidPath;
@JoinColumn(name = "fid_module", referencedColumnName = "id_activity")
@ManyToOne(optional = false, fetch = FetchType.LAZY)
private SliderWebHome fidModule;
@JoinColumn(name = "fid_module", referencedColumnName = "id_event")
@ManyToOne(optional = false, fetch = FetchType.LAZY)
private Publicacion fidModule1;
public ModuloRecurso() {
}
.......
}
私は永続化にJPAを使用しています(ただし、mvn clean installとmvn jboss-as:deployいくつかの休止状態の依存関係を取得します)誰かが私の間違いを教えてくれるか、この問題を解決できますか?ありがとうございました。
別の回答で述べたように、あなたのJavaコードは2つのフィールドに同じ結合列名を指定していますが、これは機能しません。
これがJavaコードがあなたのメモから見えるように、netbeansマッピングツールによって生成された場合
Netbenasの助けを借りて行ったマッピングで、次のコードが得られました...
不正なJavaマッピングは、SQLの制約の不適切な組み合わせが原因である可能性があります。
photo
テーブルの定義に次のものが含まれています。
CONSTRAINT fk_photo_activity FOREIGN KEY (fid_module)
REFERENCE activity (id_activity) MATCH SIMPLE
ON UPDATE NO ACTION ON DELETE NO ACTION,
CONSTRAINT fk_photo_event FOREIGN KEY (fid_module)
REFERENCE event (id_event) MATCH SIMPLE
ON UPDATE NO ACTION ON DELETE NO ACTION
列を作成しようとしますfid_module
activity
を参照する外部キーとevent
を参照する外部キー。これは機能しません。
photo
からこれらの両方のテーブルへの外部キーが必要な場合は、2つの異なる列を使用する必要があります。
同じ名前でマップされた2つの列があります
@JoinColumn(name = "fid_module", referencedColumnName = "id_activity")
@JoinColumn(name = "fid_module", referencedColumnName = "id_event")
名前属性の1つを変更してください!
あなたの例外を見ると、あなたは読むことができます:
Repeated column in mapping for entity