2016-06-09 122 views
0

我是spring-data-jpa的新手,我一直在用数据库读取记录,但现在我想插入记录。我想遵循我使用存储库类和查询进行插入的相同模式。有没有类似于这个职位的方式https://stackoverflow.com/a/24848086/3299397在哪里我可以插入一条记录,但不是明确指定每个值,而只是传递给函数一个实体对象并插入整个对象?这是我到目前为止。spring-data-jpa插入整个实体

实体类:

package blah.blah.blah; 

import java.io.Serializable; 
import java.util.Date; 

import javax.persistence.Column; 
import javax.persistence.Entity; 
import javax.persistence.GeneratedValue; 
import javax.persistence.Id; 
import javax.persistence.Table; 

import org.hibernate.annotations.GenericGenerator; 

@Entity 
@Table(name = "MESSAGE") 
public class Message implements Serializable { 

@Id 
// @GeneratedValue(generator = "system-uuid") 
// @GenericGenerator(name = "system-uuid", strategy = "uuid") 
@Column(name = "MESSAGE_GUID") 
@GeneratedValue(generator = "uuid") 
@GenericGenerator(name = "uuid", strategy = "uuid") 
private String messageGuid; 

@Column(name = "MESSAGE_TYPE_CD") 
private Long messageTypeCd; 

@Column(name = "SENDER_GUID") 
private String SenderGuid; 

@Column(name = "MESSAGE_TITLE") 
private String messageTitle; 

@Column(name = "MESSAGE_STATUS_CD") 
private Long messageStatusCd; 

@Column(name = "ACTIVATED_DT") 
private Date activatedDt; 

@Column(name = "DEACTIVATED_DT") 
private Date deactivatedDt; 

@Column(name = "CREATE_BY") 
private String createBy; 

@Column(name = "CREATE_DT") 
private Date createDt; 

@Column(name = "UPDATE_BY") 
private String updateBy; 

@Column(name = "UPDATE_DT") 
private Date updateDt; 

// required by JPA 
public Message() { 
} 

@SuppressWarnings("all") 
public Message(
     String messageGuid, 
     Long messageTypeCd, 
     String SenderGuid, 
     String messageTitle, 
     Long messageStatusCd, 
     Date activatedDt, 
     Date deactivatedDt, 
     String createBy, 
     Date createDt, 
     String updateBy, 
     Date updateDt) { 
    super(); 
    this.messageGuid = messageGuid; 
    this.messageTypeCd = messageTypeCd; 
    this.SenderGuid = SenderGuid; 
    this.messageTitle = messageTitle; 
    this.messageStatusCd = messageStatusCd; 
    this.activatedDt = activatedDt; 
    this.deactivatedDt = deactivatedDt; 
    this.createBy = createBy; 
    this.createDt = createDt; 
    this.updateBy = updateBy; 
    this.updateDt = updateDt; 
} 

public String getMessageGuid() { 
    return messageGuid; 
} 

public void setMessageGuid(String messageGuid) { 
    this.messageGuid = messageGuid; 
} 

public Long getMessageTypeCd() { 
    return messageTypeCd; 
} 

public void setMessageTypeCd(Long messageTypeCd) { 
    this.messageTypeCd = messageTypeCd; 
} 

public String getSenderGuid() { 
    return SenderGuid; 
} 

public void setSenderGuid(String senderGuid) { 
    SenderGuid = senderGuid; 
} 

public String getMessageTitle() { 
    return messageTitle; 
} 

public void setMessageTitle(String messageTitle) { 
    this.messageTitle = messageTitle; 
} 

public Long getMessageStatusCd() { 
    return messageStatusCd; 
} 

public void setMessageStatusCd(Long messageStatusCd) { 
    this.messageStatusCd = messageStatusCd; 
} 

public Date getActivatedDt() { 
    return activatedDt; 
} 

public void setActivatedDt(Date activatedDt) { 
    this.activatedDt = activatedDt; 
} 

public Date getDeactivatedDt() { 
    return deactivatedDt; 
} 

public void setDeactivatedDt(Date deactivatedDt) { 
    this.deactivatedDt = deactivatedDt; 
} 

public String getCreateBy() { 
    return createBy; 
} 

public void setCreateBy(String createBy) { 
    this.createBy = createBy; 
} 

public Date getCreateDt() { 
    return createDt; 
} 

public void setCreateDt(Date createDt) { 
    this.createDt = createDt; 
} 

public String getUpdateBy() { 
    return updateBy; 
} 

public void setUpdateBy(String updateBy) { 
    this.updateBy = updateBy; 
} 

public Date getUpdateDt() { 
    return updateDt; 
} 

public void setUpdateDt(Date updateDt) { 
    this.updateDt = updateDt; 
} 

@Override 
public int hashCode() { 
    final int prime = 31; 
    int result = 1; 
    result = prime * result + ((SenderGuid == null) ? 0 : SenderGuid.hashCode()); 
    result = prime * result + ((activatedDt == null) ? 0 : activatedDt.hashCode()); 
    result = prime * result + ((createBy == null) ? 0 : createBy.hashCode()); 
    result = prime * result + ((createDt == null) ? 0 : createDt.hashCode()); 
    result = prime * result + ((deactivatedDt == null) ? 0 : deactivatedDt.hashCode()); 
    result = prime * result + ((messageGuid == null) ? 0 : messageGuid.hashCode()); 
    result = prime * result + ((messageStatusCd == null) ? 0 : messageStatusCd.hashCode()); 
    result = prime * result + ((messageTitle == null) ? 0 : messageTitle.hashCode()); 
    result = prime * result + ((messageTypeCd == null) ? 0 : messageTypeCd.hashCode()); 
    result = prime * result + ((updateBy == null) ? 0 : updateBy.hashCode()); 
    result = prime * result + ((updateDt == null) ? 0 : updateDt.hashCode()); 
    return result; 
} 

@Override 
public boolean equals(Object obj) { 
    if (this == obj) 
     return true; 
    if (obj == null) 
     return false; 
    if (getClass() != obj.getClass()) 
     return false; 
    Message other = (Message) obj; 
    if (SenderGuid == null) { 
     if (other.SenderGuid != null) 
      return false; 
    } else if (!SenderGuid.equals(other.SenderGuid)) 
     return false; 
    if (activatedDt == null) { 
     if (other.activatedDt != null) 
      return false; 
    } else if (!activatedDt.equals(other.activatedDt)) 
     return false; 
    if (createBy == null) { 
     if (other.createBy != null) 
      return false; 
    } else if (!createBy.equals(other.createBy)) 
     return false; 
    if (createDt == null) { 
     if (other.createDt != null) 
      return false; 
    } else if (!createDt.equals(other.createDt)) 
     return false; 
    if (deactivatedDt == null) { 
     if (other.deactivatedDt != null) 
      return false; 
    } else if (!deactivatedDt.equals(other.deactivatedDt)) 
     return false; 
    if (messageGuid == null) { 
     if (other.messageGuid != null) 
      return false; 
    } else if (!messageGuid.equals(other.messageGuid)) 
     return false; 
    if (messageStatusCd == null) { 
     if (other.messageStatusCd != null) 
      return false; 
    } else if (!messageStatusCd.equals(other.messageStatusCd)) 
     return false; 
    if (messageTitle == null) { 
     if (other.messageTitle != null) 
      return false; 
    } else if (!messageTitle.equals(other.messageTitle)) 
     return false; 
    if (messageTypeCd == null) { 
     if (other.messageTypeCd != null) 
      return false; 
    } else if (!messageTypeCd.equals(other.messageTypeCd)) 
     return false; 
    if (updateBy == null) { 
     if (other.updateBy != null) 
      return false; 
    } else if (!updateBy.equals(other.updateBy)) 
     return false; 
    if (updateDt == null) { 
     if (other.updateDt != null) 
      return false; 
    } else if (!updateDt.equals(other.updateDt)) 
     return false; 
    return true; 
} 

@Override 
public String toString() { 
    return "Message [messageGuid=" + messageGuid + ", messageTypeCd=" + messageTypeCd + ", SenderGuid=" 
      + SenderGuid + ", messageTitle=" + messageTitle + ", messageStatusCd=" + messageStatusCd 
      + ", activatedDt=" + activatedDt + ", deactivatedDt=" + deactivatedDt + ", createBy=" + createBy 
      + ", createDt=" + createDt + ", updateBy=" + updateBy + ", updateDt=" + updateDt + "]"; 
} 

}

repository类:

package blah.blah.blah; 

import java.util.List; 

import org.springframework.data.jpa.repository.JpaRepository; 
import org.springframework.data.jpa.repository.Query; 
import org.springframework.data.repository.query.Param; 
import org.springframework.stereotype.Repository; 

@Repository 
public interface MessageRepository extends JpaRepository<Message, String> { 

@Query("SELECT " 
     + "m " 
     + "FROM Message m " 
     + "WHERE messageGuid = :messageGuid") 
List<Message> findByMessageGuid(@Param("messageGuid") String messageGuid); 

// THIS DOES NOT WORK! 
// @Query("INSERT " 
// + "INTO Message") 
// void insertMessage(@Param("myMessage") Message myMessage); 

} 

服务类:

package blah.blah.blah; 

import java.util.List; 

import org.slf4j.Logger; 
import org.slf4j.LoggerFactory; 
import org.springframework.beans.factory.annotation.Autowired; 
import org.springframework.stereotype.Service; 

@Service 
public class MessageServiceImpl implements MessageService { 

private static final Logger log = LoggerFactory.getLogger(MessageServiceImpl.class); 

@Autowired 
private MessageRepository messageRepository; 

@Override 
public void getMessage(String messageGuid) { 
    List<Message> messageList = messageRepository.findByMessageGuid(messageGuid); 
    for (Message message : messageList) 
     log.info("\n\n" + message.toString() + "\n\n"); 
} 

组件类:

@Component 
public class MessageComponentThingy { 

@Autowired 
MessageService messageService; 

    public void thisIsALongExample() { 

    messageService.getMessage("34A02DCF520F0831E053870910ACED7A"); 
    } 
} 

这对我的作品时,我想从数据库中读取记录...

更新注:请注意,我并不关心做'原生查询'我只想保持与我的Repository类中显示的一样的一般模式。我不会拒绝使用Native Query的答案。这对我来说并不重要。

回答

0

我不知道这是多么简单。我已经在我的资源库类中继承了JpaRepository。 JpaRepository有一个叫做'save'的方法。所以你只需调用该方法。现在一切正常....

我在Service类(有一个新的插入方法)和组件类(你可以看到我调用服务类put方法)下面添加新的代码。希望这有助于未来的人。

实体类:

package blah.blah.blah; 

import java.io.Serializable; 
import java.util.Date; 

import javax.persistence.Column; 
import javax.persistence.Entity; 
import javax.persistence.GeneratedValue; 
import javax.persistence.Id; 
import javax.persistence.Table; 

import org.hibernate.annotations.GenericGenerator; 

@Entity 
@Table(name = "MESSAGE") 
public class Message implements Serializable { 

@Id 
// @GeneratedValue(generator = "system-uuid") 
// @GenericGenerator(name = "system-uuid", strategy = "uuid") 
@Column(name = "MESSAGE_GUID") 
@GeneratedValue(generator = "uuid") 
@GenericGenerator(name = "uuid", strategy = "uuid") 
private String messageGuid; 

@Column(name = "MESSAGE_TYPE_CD") 
private Long messageTypeCd; 

@Column(name = "SENDER_GUID") 
private String SenderGuid; 

@Column(name = "MESSAGE_TITLE") 
private String messageTitle; 

@Column(name = "MESSAGE_STATUS_CD") 
private Long messageStatusCd; 

@Column(name = "ACTIVATED_DT") 
private Date activatedDt; 

@Column(name = "DEACTIVATED_DT") 
private Date deactivatedDt; 

@Column(name = "CREATE_BY") 
private String createBy; 

@Column(name = "CREATE_DT") 
private Date createDt; 

@Column(name = "UPDATE_BY") 
private String updateBy; 

@Column(name = "UPDATE_DT") 
private Date updateDt; 

// required by JPA 
public Message() { 
} 

@SuppressWarnings("all") 
public Message(
     String messageGuid, 
     Long messageTypeCd, 
     String SenderGuid, 
     String messageTitle, 
     Long messageStatusCd, 
     Date activatedDt, 
     Date deactivatedDt, 
     String createBy, 
     Date createDt, 
     String updateBy, 
     Date updateDt) { 
    super(); 
    this.messageGuid = messageGuid; 
    this.messageTypeCd = messageTypeCd; 
    this.SenderGuid = SenderGuid; 
    this.messageTitle = messageTitle; 
    this.messageStatusCd = messageStatusCd; 
    this.activatedDt = activatedDt; 
    this.deactivatedDt = deactivatedDt; 
    this.createBy = createBy; 
    this.createDt = createDt; 
    this.updateBy = updateBy; 
    this.updateDt = updateDt; 
} 

public String getMessageGuid() { 
    return messageGuid; 
} 

public void setMessageGuid(String messageGuid) { 
    this.messageGuid = messageGuid; 
} 

public Long getMessageTypeCd() { 
    return messageTypeCd; 
} 

public void setMessageTypeCd(Long messageTypeCd) { 
    this.messageTypeCd = messageTypeCd; 
} 

public String getSenderGuid() { 
    return SenderGuid; 
} 

public void setSenderGuid(String senderGuid) { 
    SenderGuid = senderGuid; 
} 

public String getMessageTitle() { 
    return messageTitle; 
} 

public void setMessageTitle(String messageTitle) { 
    this.messageTitle = messageTitle; 
} 

public Long getMessageStatusCd() { 
    return messageStatusCd; 
} 

public void setMessageStatusCd(Long messageStatusCd) { 
    this.messageStatusCd = messageStatusCd; 
} 

public Date getActivatedDt() { 
    return activatedDt; 
} 

public void setActivatedDt(Date activatedDt) { 
    this.activatedDt = activatedDt; 
} 

public Date getDeactivatedDt() { 
    return deactivatedDt; 
} 

public void setDeactivatedDt(Date deactivatedDt) { 
    this.deactivatedDt = deactivatedDt; 
} 

public String getCreateBy() { 
    return createBy; 
} 

public void setCreateBy(String createBy) { 
    this.createBy = createBy; 
} 

public Date getCreateDt() { 
    return createDt; 
} 

public void setCreateDt(Date createDt) { 
    this.createDt = createDt; 
} 

public String getUpdateBy() { 
    return updateBy; 
} 

public void setUpdateBy(String updateBy) { 
    this.updateBy = updateBy; 
} 

public Date getUpdateDt() { 
    return updateDt; 
} 

public void setUpdateDt(Date updateDt) { 
    this.updateDt = updateDt; 
} 

@Override 
public int hashCode() { 
    final int prime = 31; 
    int result = 1; 
    result = prime * result + ((SenderGuid == null) ? 0 : SenderGuid.hashCode()); 
    result = prime * result + ((activatedDt == null) ? 0 : activatedDt.hashCode()); 
    result = prime * result + ((createBy == null) ? 0 : createBy.hashCode()); 
    result = prime * result + ((createDt == null) ? 0 : createDt.hashCode()); 
    result = prime * result + ((deactivatedDt == null) ? 0 : deactivatedDt.hashCode()); 
    result = prime * result + ((messageGuid == null) ? 0 : messageGuid.hashCode()); 
    result = prime * result + ((messageStatusCd == null) ? 0 : messageStatusCd.hashCode()); 
    result = prime * result + ((messageTitle == null) ? 0 : messageTitle.hashCode()); 
    result = prime * result + ((messageTypeCd == null) ? 0 : messageTypeCd.hashCode()); 
    result = prime * result + ((updateBy == null) ? 0 : updateBy.hashCode()); 
    result = prime * result + ((updateDt == null) ? 0 : updateDt.hashCode()); 
    return result; 
} 

@Override 
public boolean equals(Object obj) { 
    if (this == obj) 
     return true; 
    if (obj == null) 
     return false; 
    if (getClass() != obj.getClass()) 
     return false; 
    Message other = (Message) obj; 
    if (SenderGuid == null) { 
     if (other.SenderGuid != null) 
      return false; 
    } else if (!SenderGuid.equals(other.SenderGuid)) 
     return false; 
    if (activatedDt == null) { 
     if (other.activatedDt != null) 
      return false; 
    } else if (!activatedDt.equals(other.activatedDt)) 
     return false; 
    if (createBy == null) { 
     if (other.createBy != null) 
      return false; 
    } else if (!createBy.equals(other.createBy)) 
     return false; 
    if (createDt == null) { 
     if (other.createDt != null) 
      return false; 
    } else if (!createDt.equals(other.createDt)) 
     return false; 
    if (deactivatedDt == null) { 
     if (other.deactivatedDt != null) 
      return false; 
    } else if (!deactivatedDt.equals(other.deactivatedDt)) 
     return false; 
    if (messageGuid == null) { 
     if (other.messageGuid != null) 
      return false; 
    } else if (!messageGuid.equals(other.messageGuid)) 
     return false; 
    if (messageStatusCd == null) { 
     if (other.messageStatusCd != null) 
      return false; 
    } else if (!messageStatusCd.equals(other.messageStatusCd)) 
     return false; 
    if (messageTitle == null) { 
     if (other.messageTitle != null) 
      return false; 
    } else if (!messageTitle.equals(other.messageTitle)) 
     return false; 
    if (messageTypeCd == null) { 
     if (other.messageTypeCd != null) 
      return false; 
    } else if (!messageTypeCd.equals(other.messageTypeCd)) 
     return false; 
    if (updateBy == null) { 
     if (other.updateBy != null) 
      return false; 
    } else if (!updateBy.equals(other.updateBy)) 
     return false; 
    if (updateDt == null) { 
     if (other.updateDt != null) 
      return false; 
    } else if (!updateDt.equals(other.updateDt)) 
     return false; 
    return true; 
} 

@Override 
public String toString() { 
    return "Message [messageGuid=" + messageGuid + ", messageTypeCd=" + messageTypeCd + ", SenderGuid=" 
      + SenderGuid + ", messageTitle=" + messageTitle + ", messageStatusCd=" + messageStatusCd 
      + ", activatedDt=" + activatedDt + ", deactivatedDt=" + deactivatedDt + ", createBy=" + createBy 
      + ", createDt=" + createDt + ", updateBy=" + updateBy + ", updateDt=" + updateDt + "]"; 
} 

}

repository类:

package blah.blah.blah; 

import java.util.List; 

import org.springframework.data.jpa.repository.JpaRepository; 
import org.springframework.data.jpa.repository.Query; 
import org.springframework.data.repository.query.Param; 
import org.springframework.stereotype.Repository; 

@Repository 
public interface MessageRepository extends JpaRepository<Message, String> { 

@Query("SELECT " 
     + "m " 
     + "FROM Message m " 
     + "WHERE messageGuid = :messageGuid") 
List<Message> findByMessageGuid(@Param("messageGuid") String messageGuid); 

} 

服务类:

package blah.blah.blah; 

import java.util.List; 

import org.slf4j.Logger; 
import org.slf4j.LoggerFactory; 
import org.springframework.beans.factory.annotation.Autowired; 
import org.springframework.stereotype.Service; 

@Service 
public class MessageServiceImpl implements MessageService { 

private static final Logger log = LoggerFactory.getLogger(MessageServiceImpl.class); 

@Autowired 
private MessageRepository messageRepository; 

@Override 
public void getMessage(String messageGuid) { 
    List<Message> messageList = messageRepository.findByMessageGuid(messageGuid); 
    for (Message message : messageList) 
     log.info("\n\n" + message.toString() + "\n\n"); 
} 

    public void putMessage(Message message) { 

    messageRepository.save(message); 

    System.out.println("\n\nInside putMessage\n\n"); 

} 

} 

组件类:

@Component 
public class MessageComponentThingy { 

@Autowired 
MessageService messageService; 

    public void thisIsALongExample() { 

    messageService.getMessage("34A02DCF520F0831E053870910ACED7A"); 

    Message message = new Message(); 
    message.setMessageTypeCd(1L); 
    message.setSenderGuid("test"); 
    message.setMessageTitle("test title"); 
    message.setMessageStatusCd(1L); 
    message.setActivatedDt(new Date()); 
    message.setDeactivatedDt(new Date()); 
    message.setCreateBy("me"); 
    message.setCreateDt(new Date()); 
    message.setUpdateBy("me"); 
    message.setUpdateDt(new Date()); 

     messageService.putMessage(message); 

    } 
}