我正在使用Hibernate
3.3.1,并正在对该示例表结构进行建模,但是在创建具有额外属性的联接表时遇到了麻烦。
是Order
和Product
表之间的多对多关系。联接表就是该Order Detail
表。我遵循这里提到的方法。
现在我有了实体
@Entity
@Table(name = "Orders")
public class Order {
@OneToMany(mappedBy="order")
private List<OrderDetail> orderItems;
}
和
@Entity
@Table(name="PRODUCTS")
public class Product {
@OneToMany(mappedBy="product")
private List<OrderDetail> orderItems;
}
和
@Entity
@IdClass(OrderDetail.class)
@Table(name = "ORDER_DETAIL")
public class OrderDetail implements Serializable {
@Id
@Column(name="ORDER_ID")
private Long orderId;
@Id
@Column(name="PRODUCT_ID")
private Long productId;
@Column(name = "PRICE")
private double price;
@Column(name = "LAST_UPDATED_TIME")
private Date lastUpdatedTime;
@ManyToOne
@JoinColumn(name = "ORDER_ID")
private Order order;
@ManyToOne
@JoinColumn(name = "PRODUCT_ID")
private Product product;
}
和
public class OrderDetailId implements Serializable {
private Long orderId;
private Long productId;
}
我使用Apache Derby进行测试,但是在生成的表结构上遇到了麻烦。
CREATE TABLE ORDER_DETAIL (
PRODUCT_ID BIGINT NOT NULL,
ORDER_ID BIGINT NOT NULL,
LAST_UPDATED_TIME TIMESTAMP NOT NULL,
PRICE DOUBLE NOT NULL
);
CREATE INDEX SQL120323142938020 ON ORDER_DETAIL (PRODUCT_ID ASC);
CREATE UNIQUE INDEX SQL120323142937810 ON ORDER_DETAIL (PRODUCT_ID ASC, ORDER_ID ASC, LAST_UPDATED_TIME ASC, PRICE ASC);
ALTER TABLE ORDER_DETAIL ADD CONSTRAINT SQL120323142937810 PRIMARY KEY (PRODUCT_ID, ORDER_ID, LAST_UPDATED_TIME, PRICE);
ALTER TABLE ORDER_DETAIL ADD CONSTRAINT FK4A94AA82CC6D989A FOREIGN KEY (PRODUCT_ID)
REFERENCES PRODUCTS (PROD_ID);
看来它已经创建了我所有的列作为主键。为什么会这样呢?
您可以使用实体的类作为IdClass的参数。那是不对的。应该使用Id类别。另外,不需要连接实体中ID的单独字段。
在下面查找类似代码的内容。我不能保证它可以在这样的旧版本的Hibernate中工作,但是可以肯定地在任何一个版本中都不能工作。值得尝试。如果要使用JPA
2.0功能,则至少升级到3.5.X版本(甚至是更新的版本)不会有什么坏处。构造函数/等式等被删除以节省空间。
@Entity
@Table(name = "Orders")
public class Order {
@Id Long id;
@OneToMany(mappedBy="order")
private List<OrderDetail> orderItems;
}
@Entity
@Table(name="PRODUCTS")
public class Product {
@Id Long id;
@OneToMany(mappedBy="product")
private List<OrderDetail> orderItems;
}
@Entity
@IdClass(OrderDetailId.class)
@Table(name = "ORDER_DETAIL")
public class OrderDetail implements Serializable {
@Id @ManyToOne @JoinColumn(name = "ORDER_ID")
private Order order;
@Id @ManyToOne @JoinColumn(name = "PRODUCT_ID")
private Product product;
@Column(name = "PRICE") private double price;
//Maybe you also want to use @TemporalType here
@Column(name = "LAST_UPDATED_TIME") private Date lastUpdatedTime;
}
public class OrderDetailId implements Serializable {
private Long order;
private Long product;
}
2017年8月15日更新在JPA 2.1及更高版本中,您无需为复合ID添加类,您可以像这样进行操作:
@Entity
@Table(name = "ORDER_DETAIL")
public class OrderDetail implements Serializable {
@Id @ManyToOne @JoinColumn(name = "ORDER_ID")
private Order order;
@Id @ManyToOne @JoinColumn(name = "PRODUCT_ID")
private Product product;
@Column(name = "PRICE") private double price;
//Maybe you also want to use @TemporalType here
@Column(name = "LAST_UPDATED_TIME") private Date lastUpdatedTime;
}
有没有一种方法可以在Laravel中检索具有所有属性的模型,即使这些属性为空?它似乎只返回属性不为null的模型。 原因是我有一个函数,如果模型中存在属性,它将从数组中更新模型属性。在设置模型之前,我使用property_exists()函数检查模型是否具有特定属性。数组键和模型属性应该匹配,所以它就是这样工作的。 如果模型已经设置了属性,它可以正常工作,因为属性存在并从数组中获取值。但是,如果属
问题内容: 用Javascript将是: 但是Python中相同的语法会创建一个字典,那不是我想要的 问题答案: 有两种功能用途。
问题内容: 我习惯像这样包含和使用JS: 出于好奇,有人知道使用src属性的内联脚本的规则,例如: 我可以测试在各种浏览器中会发生什么,但想知道官方行为是什么。 问题答案: 这是一个或另一个,而不是两者兼而有之。标签的属性优先于标签的主体。 [HTML 4.01规范: 该脚本可以在SCRIPT元素的内容内或在外部文件中定义。如果未设置该属性,则用户代理必须将元素的内容解释为脚本。如果具有URI值,
我已经在stackoverflow和网络上寻找解决方案。我没有见过有效的解决方案,因为可能没有一个帖子完全符合我的用例,它包含文件中的列表和对象结构。 这里有一个例子作为yaml 这是与属性文件相同的示例 我希望能够向我的应用程序提供 teddy.yml 或 teddy.properties 文件以进行配置。 这是我的课程: 我已经尝试了这种设置,使用环境来尝试访问属性,删除前缀,声明一个“Pro
问题内容: 长话短说:我需要使用PHP风格的getter,但要使用JavaScript。 我的JavaScript仅在Firefox中运行,因此我可以使用Mozilla特定的JS。 我能找到的制作JS吸气剂的唯一方法是指定其名称,但我想为所有可能的名称定义一个吸气剂。我不确定这是否可行,但我非常想知道。 问题答案: 可以做到!我很高兴这个存在!这里给出一个答案:是否有与python的__getat
我定义了具有@OneToOne双向关系的实体。 关系的所有者站点(子类): 其他站点(父类): 当我试图坚持有子集的父母(不坚持),然后我得到了例外 TransientPropertyValueException:对象引用未保存的临时实例-在刷新之前保存临时实例 这看起来可以理解。 但当我定义具有双向一对一/多对一关联的实体时,如: 此关系的所有者站点: 关系的另一面: 并尝试持久化具有子集合集(