안녕하세요 저는 최대 절전 모드를 배우기 시작했습니다. 내가 실수를하고있는 곳을 바로 잡아주십시오. 최대 절전 모드 주석을 사용하는 조인 테이블을 사용하여 두 테이블간에 일대 다 관계를 원한다.최대 절전 모드 주석은 내부 조인을 수행합니다.
create table assembly
(
assembly_id serial primary key,
number text,
user_id int
);
create table assembly_properties
(
property_id serial primary key,
property_name text,
property_type text
);
create table assembly_properties_mapping
(
mapping_id serial primary key,
assembly_id int,
property_id int,
property_value text,
CONSTRAINT FK_assembly_id FOREIGN KEY (assembly_id) REFERENCES assembly(assembly_id),
CONSTRAINT FK_property_id FOREIGN KEY (property_id) REFERENCES assembly_properties(property_id)
);
나는이 3 개의 테이블을 postgres sql 데이터베이스에 만들었습니다. 다음은 내 Assembly.class 아래
package com.development.wrapper;
@Entity
@Table(name = "assembly")
public class Assembly {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "assembly_id")
private int assembly_id;
@Column(name = "number")
private String number;
@Column(name ="UserID")
private int userId;
@Column
@ElementCollection(targetClass = AssemblyProperties.class)
private Set<AssemblyProperties> assembly_properties;
public int getAssembly_id() {
return assembly_id;
}
public void setAssembly_id(int assembly_id) {
this.assembly_id = assembly_id;
}
public String getNumber() {
return number;
}
public void setNumber(String number) {
this.number = number;
}
public int getUserId() {
return userId;
}
public void setUserId(int userId) {
this.userId = userId;
}
@OneToMany(targetEntity = AssemblyProperties.class, cascade = CascadeType.ALL)
@JoinTable(name = "assembly_properties_mapping", joinColumns = { @JoinColumn(name = "assembly_id") }, inverseJoinColumns = { @JoinColumn(name = "property_id") })
public Set<AssemblyProperties> getAssembly_properties() {
return assembly_properties;
}
public void setAssembly_properties(Set<AssemblyProperties> assembly_properties) {
this.assembly_properties = assembly_properties;
}
}
는 AssemblyProperties.class 패키지 com.development.wrapper이다;
@Entity
@Table(name = "assembly_properties")
public class AssemblyProperties {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "property_id")
private int property_id;
@Column(name = "property_name")
private String property_name;
@Column(name = "property_type")
private String property_type;
public int getProperty_id() {
return property_id;
}
public void setProperty_id(int property_id) {
this.property_id = property_id;
}
public String getProperty_name() {
return property_name;
}
public void setProperty_name(String property_name) {
this.property_name = property_name;
}
public String getProperty_type() {
return property_type;
}
public void setProperty_type(String property_type) {
this.property_type = property_type;
}
}
은 내가 sessionFactory에 object.org.hibernate.MappingException를 만들지 못했습니다 오류
을 얻고 아래에 주어진 데이터베이스 테이블에 데이터를로드하려고 할 때 : com.development.wrapper :에 대한 유형을 판별 할 수 없습니다. 테이블에 AssemblyProperties : Assembly_assembly_properties, 컬럼 : [org.hibernate.mapping.Column (assembly_properties)] 스레드에서 예외는 "주요"java.lang.ExceptionInInitializerError 아래
코드는 내가
를 실행하려고한다 public class Test
{
SessionFactory factory;
public Test() throws Exception
{
try
{
factory = new AnnotationConfiguration().configure().
addPackage("com.development.wrapper"). //add package if used.
addAnnotatedClass(Assembly.class).buildSessionFactory();
}
catch (Throwable ex)
{
System.err.println("Failed to create sessionFactory object." + ex);
throw new ExceptionInInitializerError(ex);
}
}
public Integer addClass(Assembly assembly)
{
Session session = factory.openSession();
Transaction tx = null;
Integer assemblyid = null;
try
{
tx = session.beginTransaction();
assemblyid = (Integer) session.save(assembly);
System.out.println(assemblyid);
tx.commit();
}
catch (HibernateException e)
{
if (tx != null)
tx.rollback();
e.printStackTrace();
}
finally
{
session.close();
}
return assemblyid;
}
public static void main(String[] args) throws Exception {
Set<AssemblyProperties> assemblyProperties = new HashSet<AssemblyProperties>();
AssemblyProperties ass=new AssemblyProperties();
ass.setProperty_name("xx");
ass.setProperty_type("List");
assemblyProperties.add(ass);
Assembly assembly =new Assembly();
assembly.setAssembly_properties(assemblyProperties);
assembly.setNumber("aaa");
assembly.setUserId(1);
Test test=new Test();
test.addClass(assembly);
}
}
이 오류를 해결하는 데 협조 해주십시오./미리 감사드립니다.
일반적으로 필드/getter JPA 주석을 혼합 할 수 없으며 작동하지 않을 수 있습니다. –