oracle主键标识符过长,java – hibernate oracle标识符太长ORA-00972

我坚持这个问题.数据库架构由其他人提供,所以我不能简单地更改名称.我尝试在任何地方添加适当的注释,也许我错过了一些东西(显而易见)?

这是我的完整映射(很多classess),我会省略getter / setter.

问题是当hibernate试图获取所有List< ControlRuleAttrib> controlRuleAttribs

控制规则

@Entity

@Table(name = "CONTROL_RULE")

public class ControlRule implements Serializable {

@Id

@GeneratedValue(strategy = GenerationType.IDENTITY)

@Column(name = "CONTROL_RULE_ID")

private Long id;

@ManyToOne(fetch = FetchType.LAZY)

@Cascade(CascadeType.ALL)

@JoinColumn(name = "CONTROL_RULE_TYPE_ID")

@ForeignKey(name = "CONTROL_RULE_TYPE_ID")

private ControlRuleType controlRuleType;

@Column(name = "JOB_NM")

private String jobname;

@Column(name = "LIBRARY_NM")

private String libraryname;

@Column(name = "TABLE_NM")

private String tablename;

@Column(name = "COLUMN_NM")

private String columnname;

@OneToMany(fetch = FetchType.LAZY)

@Cascade(CascadeType.ALL)

@JoinTable(name = "CONTROL_RULE_ATTRIB", joinColumns = {

@JoinColumn(name = "CONTROL_RULE_ID", nullable = false, updatable = false)

})

private List < ControlRuleAttrib > controlRuleAttribs;

}

ControlRuleAttrib

@Table(name = "CONTROL_RULE_ATTRIB")

@Entity

public class ControlRuleAttrib {

@EmbeddedId

private ControlRuleAttribPK controlRuleAttribPK;

@Column(name = "ATTRIBUTE_VALUE")

private String attributeValue;

}

ControleRuleAttribPK

这里的问题是,是否有可能以某种方式从ControlRuleAttrib获取Entity ControlRuleAttribType?如下所示,ControlRuleAttribTypeId是ControleRuleAttribType的id.我想得到整个对象isteand的整数.

@Embeddable

public class ControlRuleAttribPK implements Serializable {

@Column(name = "CONTROL_RULE_ID")

private Long controlRuleId;

@Column(name = "ATTRIBUTE_SEQ_NUM")

private Integer attributeSeqNum;

@Column(name = "CONTROL_RULE_ATTRIB_TYPE_ID")

private Integer controlRuleAttribTypeId;

}

ControleRuleAttribType

@Entity

@Table(name = "CONTROL_RULE_ATTRIB_TYPE")

public class ControlRuleAttribType implements Serializable {

@Id

@GeneratedValue(strategy = GenerationType.IDENTITY)

@Column(name = "CONTROL_RULE_ATTRIB_TYPE_ID")

private Integer id;

@Column(name = "CONTROL_RULE_ATTRIB_TYPE_NM")

private String typename;

@Column(name = "CONTROL_RULE_ATTRIB_TYPE_DESC")

private String typedesc;

@ManyToOne(fetch = FetchType.LAZY)

@Cascade(CascadeType.ALL)

@JoinColumn(name = "CONTROL_RULE_TYPE_ID")

@ForeignKey(name = "CONTROL_RULE_TYPE_ID")

private ControlRuleType controlruletype;

}

ControleRuleType

@Entity

@Table(name = "CONTROL_RULE_TYPE")

public class ControlRuleType implements Serializable {

@Id

@GeneratedValue(strategy = GenerationType.IDENTITY)

@Column(name = "CONTROL_RULE_TYPE_ID")

private Integer id;

@Column(name = "CONTROL_RULE_TYPE_NM")

private String typename;

@Column(name = "CONTROL_RULE_TYPE_DESC")

private String typedesc;

}

编辑

这是stacktrace:

你会发现,它在这里失败了:

at

com.execon.controllers.main.MainPageController.getMainPage(MainPageController.java:33)

[classes:]

这就是:

List list = SessionFactoryUtils.openSession(

sessionFactory ).createQuery( "from ControlRule" ).list();

System.out.println( list );

我添加的映射的每个对象都有toString()方法声明如下:

@Override

public String toString()

{

String s = "ControlRule{";

s += "id=" + id.toString();

s += ", controlRuleType=" + controlRuleType;

s += ", jobname='" + jobname + '\'';

s += ", libraryname='" + libraryname + '\'';

s += ", tablename='" + tablename + '\'';

s += ", columnname='" + columnname + '\'';

s += ", controlRuleAttribs=" + controlRuleAttribs;

s += '}';

return s;

}

和hibernate请求:

请帮忙 :)

编辑2

在阅读@Jens回答后,我对代码进行了一些更改.首先,我按你所写的做了,它给出了错误:

org.hibernate.AnnotationException: A Foreign key refering

com.execon.models.controlrules.ControlRuleAttrib from

com.execon.models.controlrules.ControlRule has the wrong number of

column. should be 3

我想这是对的,因为我有复合主键.

然后我这样试了:

@OneToMany(fetch = FetchType.LAZY)

@Cascade(CascadeType.ALL)

@JoinTable(name = "CONTROL_RULE_ATTRIB",

joinColumns = {

@JoinColumn(name = "CONTROL_RULE_ID", nullable = false, updatable = false)

},

inverseJoinColumns = {

@JoinColumn(name = "CONTROL_RULE_ID", nullable = false, updatable = false),

@JoinColumn(name = "CONTROL_RULE_ATTRIB_TYPE_ID", nullable = false, updatable = false),

@JoinColumn(name = "ATTRIBUTE_SEQ_NUM", nullable = false, updatable = false)

})

private List controlRuleAttribs;

很接近,但它给了我以下例外:

Repeated column in mapping for collection..

所以最后我删除了

joinColumns =

{

@JoinColumn(name = "CONTROL_RULE_ID", nullable = false, updatable = false)

}

除了当我尝试访问集合时,Hibernate正在进行以下查询:

最后一行是controlrul0_.CONTROL_RULE_CONTROL_RULE_ID =?虽然它应该是controlrul0_.CONTROL_RULE_ID =?.

无论如何我能使它工作吗? :/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值