我在我的项目中使用FOSMessage(https://github.com/FriendsOfSymfony/FOSMessage),我想覆盖实体的表名。
例如在FOSMessage(\ FOS \ Message \ Driver \ Doctrine \ ORM \ Entity \ Conversation)中我有:
@Entity
@Table(name = "Project")
public class ProjectDTO implements java.io.Serializable {
private Integer idproject;
private UserDTO FKUser;
public ProjectDTO() {
}
@Id
@GeneratedValue(strategy = IDENTITY)
@Column(name = "IDProject", unique = true, nullable = false)
public Integer getIdproject() {
return this.idproject;
}
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "FKUser", referencedColumnName = "IDUser")
public UserDTO getUserDTO() {
return FKUser;
}
}
在我的自定义实体中,我这样做:
/**
* @ORM\Table(name="fos_message_conversations")
* @ORM\Entity
*/
class Conversation extends BaseConversation
...
// properties
...
它可以工作但仅适用于“无关系”属性。存在具有“一对多”关系的属性,并且被忽略。 当我更新我的数据库时,我只有文本属性和id。例如,我没有“消息”关系。
我该怎么办?我只想更改表名。
答案 0 :(得分:1)
oneToMany
需要many
方面的关联映射,因此您还需要自定义Message
实体,其中地图manyToOne
指向您的自定义Conversation
。
那是因为实际上在RMDBS中,外键位于many
边表中,在这种情况下是message
表。消息中有一列conversation_id
,反之亦然。